【问题标题】:what is the exact use of auto implemented properties [duplicate]自动实现属性的确切用途是什么[重复]
【发布时间】:2015-03-16 00:49:23
【问题描述】:

可能是重复的问题。 我确实搜索过这个并参考了这些文章

我的理解是,

  1. 访问类似于使字段只读
  2. 我们可以在
  3. 中包含一些逻辑
  4. setter/getter 用于数据绑定

我真正想澄清的是,

public class Employee {
    public string strName;
}

public class Employee {
    public string strName {get;set;} 
}

我的问题:

  1. 这两种实现有什么区别
  2. 是否有任何地方(我的意思是实际场景)我们可以证明需要自动实现属性而不是第一个实现,如上所示。

更新

我知道这是一个重复的问题,我提到了它。请考虑我提出的问题的第二点。 答案究竟是什么? 我无法理解。

如果我没有任何逻辑来设置该值,这是一种好的做法还是需要什么?

好的,谢谢大家的回复。我现在明白了。由于我很新,我无法掌握它。但现在我明白了。很抱歉浪费了你所有的时间。

【问题讨论】:

  • 实际上,您在开头列出的三点是使用自动实现的属性无法完成的三件事,或者至少不能以灵活或完整的方式完成与完全编写的属性一样。
  • 选择是自动还是手动实现的属性,仅仅暴露一个成员变量是错误的。想想在成熟的代码库中必须围绕设置名称放置一些逻辑的后果。哦,停止使用匈牙利符号。
  • @O.R.Mapper 感谢您的回复。好的,那么有什么地方可以证明我在上一部分中询问的正常实现对 aip 的需求是合理的
  • 这是一个有用的答案,可以解决您的问题:stackoverflow.com/a/5203341/2777098
  • 自动实现是语法糖,只是让您不必为每个属性编写 getter 和 setter,仅此而已

标签: c# .net properties


【解决方案1】:

使用自动实现的属性,您可以做到

public class Employee {
 public string StrName {get; private set;} 
}

并设置一个外部只读但内部可设置的属性。这是你不能用你的公共变量做的事情

【讨论】:

  • 公共财产不应该按照惯例以大写字母开头吗?
  • @AniketThakur 当然应该。我责怪年轻的我!
  • 我认为{ get; private set; } 中的private 是我的秘诀。这正是 IDE0032 试图让我在这种情况下不要做的事情。现在我可以用最少的代码设置一个在类内可设置的属性,但对于外部的所有实际用途都是只读的......
【解决方案2】:

在类中包含字段不是一个好主意。使用属性可以让您更好地encapsulate您的数据。当你只想在你的类中没有任何逻辑的情况下访问一个字段时,你可以使用自动属性。

随着软件的发展,在很多情况下使用类中的字段会使事情变得错误和困难。

例如:假设你有

public class C
{
    public int Value;
}

在您的代码库中。

然后你突然意识到Value 不能设置为零。然后您必须将Value 设为私有并提供SetValue()GetValue() 方法。这很容易。但是等等,你现在将如何处理依赖于Value 的所有其他代码?

但是想想这个

public class C
{
    public int Value { get; set; }
}

现在它只需要像_value 这样的支持字段并实现settergetter

【讨论】:

  • 你的例子没有多大意义。在您希望拥有可以公开获取/设置的属性的情况下,您的示例没有说明自动实现的 getter/setter 更好的原因。如果您最初将代码编写为属性,然后将其更改为具有实现的 getter/setter,它仍然可以工作
猜你喜欢
  • 1970-01-01
  • 2020-11-15
  • 2017-11-18
  • 1970-01-01
  • 2023-04-01
  • 2020-04-26
  • 2011-11-26
相关资源
最近更新 更多