您好,登录后才能下订单哦!
本篇文章为大家展示了C#的类型基础都有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
我们先简单回顾一下C#中的类型系统。C#中的类型一共分为两类,一类是值类型(ValueType),一类是引用类型(ReferenceType)。值类型和引用类型是以它们在计算机内存中是如何被分配的来划分的。值类型包括结构和枚举,引用类型包括类、接口、委托等。还有一种特殊的值类型,称为简单类型(SimpleType),比如byte,int等,这些简单类型实际上是FCL类库类型的别名,比如声明一个int类型,实际上是声明一个System.Int32结构类型。因此,在Int32类型中定义的操作,都可以应用在int类型上,比如“123.Equals(2)”。
所有的值类型都隐式地继承自System.ValueType类型(注意System.ValueType本身是一个类类型),System.ValueType和所有的引用类型都继承自System.Object基类。你不能显示地让结构继承一个类,因为C#不支持多重继承,而结构已经隐式继承自ValueType。
当声明一个值类型的变量(Variable)的时候,变量本身包含了值类型的全部字段,该变量会被分配在线程堆栈(ThreadStack)上。
当我们在程序中写下这样的一条变量的声明语句时:
ValPointvPoint1;
实际产生的效果是声明了vPoint1变量,变量本身包含了值类型的所有字段(即你想要的所有数据)。
因为变量已经包含了值类型的所有字段,所以,此时你已经可以对它进行操作了(对变量进行操作,实际上是一系列的入栈、出栈操作)。
解决这个问题我们可以通过这样一种方式:编译器隐式地会为结构类型创建了无参数构造函数。在这个构造函数中会对结构成员进行初始化,所有的值类型成员被赋予0或相当于0的值(针对Char类型),所有的引用类型被赋予null值。(因此,Struct类型不可以自行声明无参数的构造函数)。所以,我们可以通过隐式声明的构造函数去创建一个ValPoint类型变量:
ValPointvPoint1=newValPoint();
Console.WriteLine(vPoint.x);//输出为0
我们将上面代码第一句的表达式由“=”分隔拆成两部分来看:
左边ValPointvPoint1,在堆栈上创建一个ValPoint类型的变量vPoint,结构的所有成员均未赋值。在进行newValPoint()之前,将vPoint压到栈上。
右边newValPoint(),new操作符不会分配内存,它仅仅调用ValPoint结构的默认构造函数,根据构造函数去初始化vPoint结构的所有字段。
上述内容就是C#的类型基础都有哪些,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。