C# 自动实现属性的确切用途是什么
这可能是一个重复的问题。 我确实搜索过这篇文章,并引用了这些文章C# 自动实现属性的确切用途是什么,c#,.net,properties,C#,.net,Properties,这可能是一个重复的问题。 我确实搜索过这篇文章,并引用了这些文章 , , 我理解的重点是 访问权限,如使字段只读 我们可以在中包含一些逻辑 用于数据绑定的setter/getter 我真正想澄清的是 public class Employee { public string strName; } public class Employee { public string strName {get;set;} } 我的问题: 这两种实现之间有什么区别 是否有任何地方(我
- ,
- ,
public class Employee {
public string strName;
}
public class Employee {
public string strName {get;set;}
}
我的问题:
很好,谢谢大家的回复。我现在明白了。因为我是新手,所以我不能理解它。但现在我明白了。很抱歉浪费您的时间。使用自动实现的属性,您可以
public class Employee {
public string StrName {get; private set;}
}
并创建外部只读但内部可设置的属性。这是你不能用你的公共变量做的,在类中有一个字段不是一个好主意。使用属性可以更好地管理数据。当您只想在类中没有任何逻辑的情况下访问字段时,可以使用自动属性 在很多情况下,在类中使用字段会使事情随着软件的发展而变得更糟 例如:假设你有
public class C
{
public int Value;
}
在您的代码库中
然后你突然意识到值
不能设置为零。然后必须将Value
设为私有,并提供SetValue()
和GetValue()
方法。这很容易。但是等等,你现在要如何处理所有依赖于值的代码
但是想想这个
public class C
{
public int Value { get; set; }
}
现在它只需要一个像\u value
这样的支持字段,并实现setter
和getter
实际上,您在开头列出的三点是自动实现的属性无法完成的三件事,或者至少没有完全编写的属性灵活或完整。选择是自动或手动实现的属性,仅公开成员变量是错误的。考虑一下在一个成熟的代码库中设置名称时必须使用一些逻辑的后果。哦,还有匈牙利符号。@O.R.Mapper谢谢你的回复。好的,那么有没有什么地方可以证明在正常的实现中需要aip,正如我在最后一部分中所问的。这里有一个非常有帮助的答案,可以解决您的问题:自动实现是语法上的糖分,您不必为每个属性编写getter和setter,除此之外,公共财产不应该按照惯例以大写字母开头吗?@AniketThakur当然应该。我责怪年轻的我!我想是{get;private set;}
中的private
才是我的秘方。这正是IDE0032试图让我在这种情况下不要做的。现在,我可以用最少的代码设置一个属性,该属性在类内是可设置的,但对于类外的所有实际用途是只读的……您的示例没有多大意义。在您希望拥有一个可以公开获取/设置的属性的情况下,您的示例没有给出自动实现的getter/setter更好的原因。如果最初将代码作为属性编写,然后将其更改为具有实现的getter/setter,那么它仍然可以工作