what is the exact use of auto implemented properties
可能是个重复的问题。我搜索过这个并参考了这些文章
- 在所有者类中使用属性与支持字段,
- 我应该选择有或没有私有字段的属性,
- 属性很重要。
我明白的是,
像使字段只读一样访问
我们可以在
用于数据绑定的setter/getter
我真正想澄清的是,
1 2 3 4 5 6 7
| public class Employee {
public string strName;
}
public class Employee {
public string strName {get;set;}
} |
我的问题:
这两种实现有什么区别
是否有任何地方(我的意思是实际场景)可以证明我们需要自动实现的属性,而不是前面所示的第一个实现。
更新
我知道这是个重复的问题,我提到过。我提出的问题请考虑我的第二点。确切的答案是什么?我不明白。
如果我没有任何逻辑来设置这个值,这是一个好的实践还是需要什么?
好的,谢谢大家的回复。我现在明白了。因为我是新来的,所以我抓不住。但现在我明白了。很抱歉浪费了你所有的时间。
- 实际上,您在开头列出的三点是三件事情,它们不能用自动实现的属性来完成,或者至少不能像完全写入的属性那样灵活或完整。
- 选择是自动或手动实现的属性,只公开成员变量是错误的。考虑一下在成熟的代码库中设置名称时必须使用一些逻辑的后果。哦,用匈牙利符号停下来。
- @O.R.Mapper谢谢回复。好吧,那么有没有什么地方可以像我在上一部分中所要求的那样,证明对AIP的需求高于正常的实现呢?
- 这里有一个非常有用的答案,可以帮助您解决一些问题:stackoverflow.com/a/5203341/2777098
- auto-implementaion是语法上的制糖,它使您不再需要为每个属性编写getter和setter,而无需编写其他任何内容。
- @戴维希利尔,我已经提到过它的复制品。我被问到一个场景,在这个场景中,我需要使用自动实现的属性,而不是像我的问题中所示的第一个实现。我需要澄清这一点。所以我为什么问这个问题
- 它被覆盖了——它是为了使您的接口能够健壮地进行更改。将字段更改为属性不向后兼容。属性被认为是公开公共接口的最佳方法。
使用自动实现的属性,您可以
1 2 3
| public class Employee {
public string StrName {get; private set;}
} |
使一个外部只读但内部可设置的属性。你不能用你的公共变量
- 公共财产不应该按照惯例以大写字母开头吗?
- @阿尼克塔库尔当然应该。我为此责怪年轻的我!
- 我想是{ get; private set; }中的private,这是我的秘密酱汁。这正是IDE0032试图让我在本案中不去做的。现在,我可以用最少的代码设置一个可以在类内设置的属性,但对于类外的所有实际用途都是只读的…
在一个类中有一个字段不是一个好主意。使用属性可以更好地封装数据。当您只想让一个字段在类中不需要任何逻辑就可以访问时,您可以使用自动属性。
在许多场景中,使用类内的字段会使事情随着软件的发展而变得越来越困难。
例如:假设您
1 2 3 4
| public class C
{
public int Value;
} |
在代码库中。
然后突然你意识到Value不能设置为零。然后你必须使Value私有化,并提供SetValue()和GetValue()方法。这很容易。但是等等,你现在要如何处理所有依赖于Value的其他代码?
但想想这个
1 2 3 4
| public class C
{
public int Value { get; set; }
} |
现在,它只需要像_value这样的支持字段,并实现setter和getter。
- 你的例子没有多大意义。在您希望拥有一个可以公开获取/设置的属性的情况下,您的示例并没有给出为什么自动实现的getter/setter更好的原因。如果最初将代码作为属性编写,然后将其更改为具有实现的getter/setter,那么它仍然可以工作。