学渣的c#复习手记 类 二 字段与属性
学渣又开始逗比了
今天说一下。。。字段和属性
字段什么的。。没什么太大意思
还是先展示一段代码
class property { public property() { //对readonly字段进行赋值。。 Console.WriteLine("这里是构造函数,对只读字段赋值为20"); power_readonly1 = 20; } private const int power_const = 100; //对于一个常量来说必须有一个值。。而且必须在声明它的时候就有 private readonly int power_readonly1; //这个东西有只读属性,这个东西比const灵活,只能被赋值一次。。在构造函数里 //字段估计就说这么多了 //属性 int _power; public int power { get { return _power+1; } //这里是属性值 set { //c#参考书上是这么屌丝地写着:do whatever needs to be done set the property //n翻译过来就是。。做任何需要或者想做的事情。。也就是说我们可以把这里当做一个方法 Console.WriteLine("执行_power = value之前 \n value\n _power\n power"); Console.WriteLine(value); Console.WriteLine(_power); Console.WriteLine(power); _power = value;//value这个东西就是给power赋的值, value 是隐式参数,此参数的类型是属性的类型。 Console.WriteLine("执行_power = value之后"); Console.WriteLine(value); Console.WriteLine(_power); Console.WriteLine(power); Console.WriteLine("属性在此执行"); } } //这里就有的说了,上面这个属性是自己写的,在这个地方需要自己定义一个变量,然后一起使用,不然会出乱子。 public int power_moren { get; set; } //其实在这里还是定义了一个int型的变量,默认生成的(一会我会搞一个图) private int _power_readonly; public int power_readonly { get { return _power_readonly; } } //这是一个只读属性。。c#高级编程77页代码貌似有问题。。 //同样光有set是只写的,但是不推荐使用。。为什么。。只写属性的意义是什么? //最后照理写一个测试方法 public void assignment() { Console.WriteLine("给默认赋值为20"); power_moren = 20; Console.WriteLine("给那个所谓的只读属性(所谓只读只是对外部只读。。封装。。)赋值为300"); _power_readonly = 300; Console.WriteLine("给那个写的过程最多的赋值400"); power = 400; } public void showTime() { Console.WriteLine("power_const"); Console.WriteLine(power_const); Console.WriteLine("power_readonly1"); Console.WriteLine(power_readonly1); Console.WriteLine("power"); Console.WriteLine(power); Console.WriteLine("power_moren"); Console.WriteLine(power_moren); Console.WriteLine("power_readonly"); Console.WriteLine(power_readonly); } }
然后还是main函数
static void Main(string[] args) { property wangji = new property(); wangji.assignment(); wangji.showTime(); Console.ReadKey(); }
输出了预期的结果
刚才说到有一个属性是默认生成的。。现在在反编译器里看一下。。这样可以更加好的了解原理
属性必定对应了一个变量。。
好吧。。现在想一下给属性赋值的时候发生了什么事情
首先一个属性被赋值的时候。
比如上面的power=400;
属性内部会有一个叫做value的值被赋值。。
这个时候执行set(你问get什么时候执行。。我认为当需要属性的值出现的时候才会执行)
然后输出刚才的那些东西,如上面的预期结果
后来对_power=value赋值完毕后
在读取power的值的时候开始执行。。然后就如刚才的所示。。数字发生了改变
///////////////////////////////////////////////////////////////////////////
最后说一下属性的意义
我认为get访问器的意义在于处理数据。并且输出处理完的数据。输入的数据,一般情况下在set里都会有将后备变量改为value值
然后这个时候属性的值就是power在get访问器里进行处理。(比如说可以写收钱水表的处理代码)
所以power=400并不代表power==400
。。
set访问器里我们可以利用value(传入的数值)和属性值来做自己想做的事情,在属性被赋值时执行。。
其实到底来说
属性还是一种简化,简化了对传入数据的处理过程,属性值不是一个真实存在变量形式,而是计算出来的,与备用变量有密切关系。
睡觉去了。。