构造函数
定义一个与包含的类同名的方法,但该方法没有返回类型。
例如:
1 public class User 2 { 3 public string Id { get; set; } 4 public string Name { get; set; } 5 // 没必要指定只带有一个空的构造函数,因为编译器会自动生成一个默认的构造函数。 6 public User() 7 { 8 } 9 }
如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。因此在创建实例时必须实现构造函数。例如:
public class User { public string Id { get; set; } public string Name { get; set; } // 没必要指定只带有一个空的构造函数,因为编译器会自动生成一个默认的构造函数。 public User(string id) { Id = id; } } // 必须实现构造函数 var user = new User("1");
表达式体构造函数,简化代码的新语法糖:
1 public class User 2 { 3 public string Id { get; set; } 4 public string Name { get; set; } 5 public User(string id) => Id = id; 6 }
从构造函数中调用其他构造函数:
public class User { public string Id { get; set; } public string Name { get; set; } public User(string id) => Id = id; public User(string id, string name) : this(id) => Name = name; }
可以将构造函数定义为private或protected,不能在实例化类的外部实现构造函数,但可以使用静态成员来实例化类。
例如:
public class User { private static User _instance; private User(string name) => Name = name; public string Name { get; set; } public static User Instance => _instance ?? (_instance = new User("小红")); public static User CreateInstance(string name) => new User(name); } // 调用 // 使用静态属性实例化类 var user = User.Instance; // 使用静态方法实例化类 var user2 = User.CreateInstance("小明");
静态构造函数:
可以给类编写静态构造函数。
静态构造函数只执行一次(程序开始执行类的实例的时候),而前面的构造函数是实例构造函数,只有创建类的对象,就会执行。
如果类的一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段或属性。
例如:
1 /// <summary> 2 /// 获取配置信息类,只需要在程序启动时在静态构造函数中执行一次就可以了 3 /// </summary> 4 public class ConfigSettings 5 { 6 public static string Db { get; } 7 8 static ConfigSettings() 9 { 10 Db = ConfigurationManager.ConnectionStrings["Db"].ConnectionString; 11 } 12 }
如果给一个类是静态类(使用static修饰符声明),则不能被实例化(即new创建)。也只能包含静态成员。