构造函数

定义一个与包含的类同名的方法,但该方法没有返回类型。

例如:

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创建)。也只能包含静态成员。

posted @ 2020-04-12 18:24  VTing4You  阅读(182)  评论(0编辑  收藏  举报