C#中字段、属性和构造函数赋值的问题提出问题如下所述:
首先提出几个问题:
1、如何实现自己的注入框架?
2、字段和自动属性的区别是什么?
3、字段和自动属性声明时的直接赋值和构造函数赋值有什么区别?
4、为什么只读字段和只读自动属性(只有get没有set访问器)都可以在构造函数中进行赋值?
5、反射可以给只读字段或者只读属性进行赋值吗?
6、自动属性和普通属性的区别?
这些问题是我在试着写自己的注入实现时遇到的问题。这些问题应该在学习C#时的第一节课就应该学到了,我看网上还有人分享说他在面试时遇到面试官问为什么只读字段和只读自动属性可以在构造函数中进行赋值,他没有回答上来,然后他写文章探讨这个问题,却没有得出一个明显的答案,实在可惜。网上关于只读属性有些是写ReadOnly特性的,读到这些文章直接跳过吧,老版本的C#现在看也没什么帮助。
给出答案
2、属性比字段多了get/set访问器;字段是在内存中声明的一个内存空间,可以实实在在的存储值;属性像字段一样使用,却可以有自己的代码段,能赋值取值,是因为访问属性就是调用属性的get/set方法对字段进行取值赋值(或者不操作字段);在MSDN上,建议字段作为类的私有变量使用private/protected修饰,属性则往往作为共有属性使用public修饰;字段的读取和操作都是直接操作内存,属性是调用get/set访问器,所以字段比属性快。










