C#构造函数的讨论

this关键字在构造函数中的应用

当类中有多个构造函数且它们之间存在相同的代码,为了减少冗余的代码,可以使用this进行串联构造函数流的方式进行声明构造函数,例如:

 class Motorcycle
    {
        public int driverIntensity;
        public string driverName;
       
           public Motorcycle()
        {
            Console.WriteLine("In default ctor");
        }

        public Motorcycle(int intensity)
            : this(intensity, "")
        {
            Console.WriteLine("In ctor taking an int");
        }
      //主构造函数
  public Motorcycle(int intensity, string name)
        {
            Console.WriteLine("In master ctor ");
            if (intensity > 10)
            {
                intensity = 10;
            }
            driverIntensity = intensity;
            driverName = name;
        }
    }
	static void Main(string[] args)
        {
            Motorcycle c = new Motorcycle(5);
            c.SetDriverName("Tiny");
            Console.WriteLine("Rider name is {0}", c.driverName); 
            Console.WriteLine();
}

一般以参数最多的构造函数为主构造函数

构造函数逻辑流程:

通过调用只有单个参数的构造函数

将传入的参数通过this串联构造函数流将参数传入主构造函数,并且补上余下的参数

执行主构造函数

返回原构造函数

可选参数构造函数

.NET4中提供了可选参数的构造函数,即

定义可选参数的构造函数

 public Motorcycle(int intensity = 0, string name = "")
        {
            if (intensity > 10)
            {
                intensity = 10;
            }
            driverIntensity = intensity;
            driverName = name;
        }

调用构造函数

Motorcycle m1 = new Motorcycle();
            Console.WriteLine("Name= {0}, Intensity= {1}", m1.driverName, m1.driverIntensity);

            // driverName = "Tiny", driverIntensity = 0 
            Motorcycle m2 = new Motorcycle(name:"Tiny");
            Console.WriteLine("Name= {0}, Intensity= {1}", m2.driverName, m2.driverIntensity);

            // driverName = "", driverIntensity = 7  
            Motorcycle m3 = new Motorcycle(7);
            Console.WriteLine("Name= {0}, Intensity= {1}", m3.driverName, m3.driverIntensity);

但由于这种用法只能在.NET4及以上版本才可以,所以,一般很少用,主要用this进行串联构造函数流的方式进行声明构造函数

静态构造函数

静态构造函数是特殊的构造函数,适合用于初始化在编译时未指定静态数据的值,例如从外部数据导入或者运行时随机生成等

静态构造函数注意事项;

一个类只能有一个静态构造函数,也就是说静态构造函数不能被重载

静态构造函数不可以用访问修饰符修饰(默认public),并且必须是无参构造函数

不论创建多少实例,静态构造函数只执行一次

在访问静态成员或创建实例之前,必须运行静态构造函数

静态构造函数的优先级别高于任何级别的构造函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值