从学生转成职业人士才发现自己在学校掌握的知识太也肤浅,而且这点肤浅东西都没有完全掌握,只得重新从基础学起,最近在读《C#高级编程第六版》以后把点滴的收获写下来
类与结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。
结构与类的区别是它们在内存中的存储方式,类是存储在堆上的引用类型而结构是存储在堆栈上的值类型,访问方式和一些特征。较小的数据类型使用结构可提高性能。
用struct代替calss就可以声明结构。
大多数情况下,类要比结构常用的多。有时仅需要小的数据结构,此时,类提供的功能多于我们需要的功能,由于性能的原因,最好使用结构。在许多方面可以把C#中的结构看作是缩小的类,但更适合于把一些数据组合起来的场合。它与类的区别在于:
-
1。结构是值类型,不是引用类型,它们存储堆栈中或存储为内联(inline)(如果它们是另一个保存在堆中的对象的一部分),其生存期的限制与简单的数据类型一样。
-
2.结构不支持继承。
-
3.结构的构造函数的工作方式有一些区别。尤其是编辑器总是提供一个无参数的默认构造函数这是不允许替换的。
-
4.使用结构,可以指定字段如何在内存中布局。
结构是值类型所以会影响性能但根据使用结构的方式这种性能可能是正面的,也可能是负面的。正面的影响是为结构分配内存时,速度非常快,因为它们将内联或保存在堆栈中在结构超出了作用域或删除时速度也很快。另一方面,只要把结构作为参数来传递或者把一个结构负给另一个结构(例如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类则只复制引用。这样,就会有性能损失,根据结构大小,性能损失也不同。所以结构主要用于小的数据结构。但当把结构作为参数传递给方法时,就应把它作为ref参数传递,以避免性能损失——此时只传递了结构在内存中的地址,这样传递速度就与在类中传递速度一样快了。但是如果这样做,就必须注意被调用的方法可以改变结构的值。
为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数