对象和类型(第四部分)
Posted Dean二十七
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象和类型(第四部分)相关的知识,希望对你有一定的参考价值。
二、对象和类型(第四部分)
四、匿名类型
var关键字,它用于表示隐式类型化的变量。var与new关键字一起使用时,可以创建匿名类型。匿名类型只是继承自Object且没有名称的类。该类的定义从初始化器中推断,类似于隐式类型化的变量。
五、结构
结构是值类型,而不是引用类型。它们存储在栈中或存储为内联(inline)(如果它们是存储在堆中的另一个对象的一部分),其生存周期的限制与简单的数据类性一样。
*.结构不支持继承。
*.对于结构,构造函数的工作有一些区别。尤其是在编译器总是提供了一个无参数的默认构造函数,它是不允许替换的。
*.使用结构,可以指定字段如何在内存中布局。因为结构实际上是把数据项组合在一起,有时大多数或者全部字段都声明为public。严格来说,这与编写.Net代码的规则相反------根据Mircrosoft,字段(除了const字段之外)应总是私有的,并由公有属性封装。但是,对于简单的结构,许多开发人员都认为共有字段是可接受的编程方式。
1.结构是值类
虽然结构是值类型,但是在语法上常常可以把它们当作类来处理。
注意,因为结构是值类型,所以new运算符与类和其他引用类型的工作方式不同。new运算符并不分配堆中的内存,而是指调用相应的构造函数,根据传送给它的参数,初始化所有的字段。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _003 { public class MyClass { const int a = 123456; readonly int b; int c = 0; private MyClass() { b = 123456; c = 654321; } public static MyClass CreateMyClass() { MyClass my = new MyClass(); return my; } public void Printf() { Console.WriteLine(a + " " + b + " " + c); } } struct MyStruct { public int a; public int b; public MyStruct(int _a, int _b) { a = 100; b = 101; } } class Program { static void Main(string[] args) { //const int a = 100; //readonly int b; MyClass mc = MyClass.CreateMyClass(); mc.Printf(); MyStruct ms = new MyStruct(1, 2); Console.WriteLine(ms.a + " " + ms.b); Console.ReadKey(); } } }
结构遵循其它数据类型都遵循的规则:在使用前所有的元素都必须初始化。在结构上调用new运算符,或者给所有的字段分别赋值。结构就完全初始化了。当然,如果结构定义为类的成员字段,在初始化包含的对象时,该结构会自动初始化为0。
结构是会影响性能的值类型,但根据使用的结构方式。
以上是关于对象和类型(第四部分)的主要内容,如果未能解决你的问题,请参考以下文章