public int Lengthwise { get; set; }
也就是说,我们可以写
private int leng;// поле
public int Leng
get{return leng;}
set{value = value > 0 || value < 10 ? name : name = 0}
但如果它是缩短版本,那么我们将无法保护该字段(让我们限制输入),因为我们没有这样的字段。我引用书中的内容。
如果您有很多不需要保护而只需要包装的变量怎么办?编写如此大量的代码是相当昂贵的。在这里您可以使用缩短的属性声明。让我们使用快捷方式来声明谷仓的深度:
public int Lengthwise { get; set; }
get 和 set 关键字后面的大括号内没有代码,只有分号。这是什么意思?这非常简单 - Lengthwise 属性既是外部源的属性,又是内部使用的变量。当然,我们没有代码,这意味着我们无法(而且根本没有地方)添加保护代码,因此在属性只是变量的包装器的情况下使用此方法。
一切都对你来说很混乱,防御和领域有什么关系?属性是一对 2 个方法,一个 getter 和一个 setter。
想象一下2种方法
没什么不寻常的,对吧?现在我将把它作为财产
你明白发生了什么事吗?根本就没有场。属性是 OOP 中流行的设计模式。当没有属性时,开发人员分别编写getter方法和setter方法。
您可能已经猜对了,setter 可用于保护对象的内部状态,而 getter 可用于转换返回的数据。
属性可以执行方法可以执行的所有操作:具有访问修饰符、执行任何代码,因为您可以从 getter 和 setter 调用应用程序中的任何方法,或者创建类,或者引发异常,执行代码没有任何限制在一个属性中。
getter 的唯一要求是 getter 方法必须有一个与属性类型相同的返回值,并且没有参数;相反,setter 没有返回值,但只有一个参数,其中的类型对应于属性的类型
value。现在,什么是汽车财产?有时,您只需要从一个字段接受并传递数据,而不对其进行任何操作,但能够为 getter 和 setter 设置访问修饰符。
以免每次都写这个
使用缩写符号
让我们看看编译器在生成中间语言(IL)代码之前将自动属性转换成什么,并将其扩展为常规属性。
反编译后的代码看起来比我上面展示的示例更脏,但逻辑上它是完全相同的,没有什么魔力。
属性是 2 个逻辑上配对的方法:getter 和 setter。这里的关键词是“方法”。
还值得注意的是,属性只能有 getter 而没有 setter,或者只能有 setter 而没有 getter。最后一个选择很少见。
每次访问属性时,都会执行其 getter。每次为属性赋值时,您都在执行其设置器。
奖金
哦,是的,还有一个限制:getter 和 setter 不能有修饰符
async,即异步。为了窒息:D,我会写下,从技术上讲,getter 可以是异步的,即返回可等待类型,但 setter 不能,因为它不返回任何内容。
异步 getter 的示例
您可以异步执行此 getter
这再次证明属性可以做与方法完全相同的事情。
如果您了解所有内容,请查看答案开头的代码示例,其中有一个没有字段的属性。问题:如果我写这样的代码会发生什么?