值类型的Constructor

本文探讨了C#中值类型(ValueType)的构造特点,包括不允许无参数构造函数、有参数构造函数必须初始化所有字段等特性,并通过具体示例说明这些规则。

      使用C#的时候我们最熟悉的是类,也就是Reference Type,翻译成中文是引用类型。但是C#还有另外的一种类型往往被我们用的最多缺经常被忽视,这种类型就是值类型(Value Type)。

      值类型的构造器(Constructor)不同于引用类型的Constructor。在C#中值类型不允许无参数的Constructor,但是在CLR中是没有这个限制的,请看下面的代码:

struct Point
{
 public   int x;
 public   int y;
 public   Point() 

      m_x = m_y = 5; 
   }
}

   编译此代码会提示错误信息:结构不能包含显式的无参数构造函数。这种设定是C#为了避免程序员在使用结构是造成混乱而故意添加上的。

    另外如果在有参数的构造器中不能,把结构的所有字段都初始化也会提示错误信息:下面的代码在编译的时候会弹出错误信息,注意注释部分,如果用new 操作符生成一个Point的示例那么,就不会在弹出错误提示了。           

 internal struct Point
    {
        public int x;
        public int y;
        public Point(int i)
        {
            //this = new Point();
            x = i;
          
        }
    } 

     值类型的Constructor和引用类型的不同之处有一下几点:

     1.不能使用无参数Constructor

     2.有参数Constructor中,必须将值类型所有的字段都初始化,要保证值类型的字段在读取之前是已经初始化好的。

     3.静态的Constructor在值类型中是调用不到的。

转载于:https://www.cnblogs.com/glorysword/p/3334137.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值