欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C#构造函数

程序员文章站 2022-03-04 12:33:27
...

实例构造函数

只要创建对象就会执行构造函数

无参构造函数
  • 声明一个与当前类同名的方法,但该方法没有返回值
  • 一般情况,如果没有显示的创建构造函数,编译器会在后台创建一个默认的无参构造函数,所以没有必要创建一个没有参数的构造函数
带参构造函数
  • 如果代码中提供了带参的构造函数,编译器将不会自动创建无参构造函数

静态构造函数

  • 静态构造函数只执行一次
  • 静态构造函数是为了解决静态字段和属性需要在第一次使用类之前从外部源中初始化
  • .NET运行库没有确保具体什么时候执行静态构造函数,所以不应把要求在某个特定时刻执行的代码放在其中,也不能预计不同类的静态构造函数的执行顺序。但可以确保静态构造函数至多运行一次,即在代码引用类之前调用它
  • 静态构造函数没有访问修饰符
  • 静态构造函数不能带任何参数
  • 静态构造函数在类中只能定义一个
  • 静态构造函数只能访问静态成员,不能访问实例成员

在加载类时执行静态构造函数,在创建实例时执行实例构造函数


实例

Step2/API/User.cs

using System;

namespace Step2.API
{
    class User
    {
        public static int Age=20;

        //使用属性为对象的实例提供访问接口,只读
        public int Id
        {
            get;set;
        }
        public string Name
        {
            get;set;
        }

        /*
         * 无参构造函数
         */
        public User()
        {
            Console.WriteLine("调用了无参构造函数");
            this.Id = 2002;
            this.Name = "王五";
        }


        /*
         * 带有参数的构造函数
         */
        public User(int id,string name)
        {
            Console.WriteLine("调用了带参构造函数");

            //使用this区分成员和参数
            this.Id = id;
            this.Name = name;
        }

        //静态构造函数只能访问静态成员
        static User()
        {
            Console.WriteLine("调用静态构造函数");
        }
    }
}

Step2/Run.cs

using System;
using Step2.API;

namespace Step2
{
    class Run
    {
        //public int Age { get; set; }
        static void Main(string[] args)
        {
            //string userName;
            //(new Run()).Age = 15;

            ////类的静态方法调用
            //ClassAndStruct.Print();
            //userName=ClassAndStruct.UserName();
            //Console.WriteLine(userName);

            ////结构的静态方法调用
            //People.Print();
            //userName = People.UserName();
            //Console.WriteLine(userName);

            //构造函数
            User user1 = new User();
            User user2 = new User(1001,"张三");

            //对象实例不能访问静态成员
            Console.WriteLine("user1:"+user1.Id);
            Console.WriteLine("user1:"  + user1.Name);

            Console.WriteLine("user2:"  + user2.Id);
            Console.WriteLine("user2:"  + user2.Name);

            user1.Id = 3001;
            user2.Name = "赵四";
            Console.WriteLine("user1:"  + user1.Id);
            Console.WriteLine("user2:"  + user2.Name);

            Console.WriteLine(User.Age);
            User.Age = 21;
            Console.WriteLine(User.Age);
            Console.ReadKey();
        }
    }
}

输出
调用静态构造函数
调用了无参构造函数
调用了带参构造函数
user1:2002
user1:王五
user2:1001
user2:张三
user1:3001
user2:赵四
20
21