C#类==>构造函数

1,如果没有提供构造函数,编译器会在后台创建一个默认的构造函数,这是一个非常基本的构造函数,只能把成员字段初始化为标准默认值。

 

2,C#中的基本字段都在默认情况下初始化为0,而C++中的基本字段不进行初始化,不需要像C++那样频繁的编写构造函数。

 

3,可以为构造函数提供任意多的重载,但如果提供了构造函数,编译器就不会自动提供默认的构造函数,这时使用无参数的构造函数实例化对象会报错。

     如:类Class1只有一个带有一个参数的构造函数 ,那么 Class1 cls=new Class1()会报错。

 

4,如下:如果不为类MyNumber定义任何公共或受保护构造函数,那么就不能使用new运算符在外部代码中实例化该类

    public class MyNumber
    {
        private int number;
        private MyNumber(int number)
        {
            this.number = number;
        }
    }

 

    在如下情况中使用

    ※类仅用于静态成员或属性

    ※希望类通过调用某个静态成员函数来实例化

 

5,可以给类创建无参数的静态构造函数,这种构造函数只执行一次。

     如这样定义构造函数static MyNumber() { Console.WriteLine("123"); }的话,那么无论怎样用new 生成实例,构造函数都只执行一次。

     ※注意

         静态构造函数是在加载类时执行,而无参数构造函数是在创建实例时执行,所以可以共存。

         静态构造函数没有修饰符public static MyNumber() { Console.WriteLine("123"); },这样定义会报错。

         静态构造函数不能带参数

         一个类中静态构造函数只能有一个 

         静态构造函数只能访问类的静态成员,不能访问实例成员

     

6,构造函数的初始化器

     如下类A,有两个构造函数,好的编程习惯最好把代码放在一起,这时可以考虑用构造函数的初始化器

    class A
    {
        private string str1;
        private uint iCnt;

        public A(string str, uint i)
        {
            str1 = str;
            iCnt = i;
        }

        public A(string str)
        {
            str1 = str;
            iCnt = 100;
        }   
    } 

   

     改成如下定义

    class A
    {
        private string str1;
        private uint iCnt;

        public A(string str, uint i)
        {
            str1 = str;
            iCnt = i;
        }

        public A(string str)
            : this(str, 100)
        {

        }
    }

 

    如果使用基类的构造函数,只要把this关键字换为base即可,但不能有多个调用。

   

   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值