自动实现属性的确切用途是什么
what is the exact use of auto implemented properties
可能是重复的问题。
我确实搜索过这个并参考了这些文章
- use of properties vs backing field inside owner class,
- should i prefer properties with or without private fields,
- Properties Matter.
我的理解是,
- 访问就像将字段设置为只读
- 我们可以在
中包含一些逻辑
- setter/getter用于数据绑定
我真正想澄清的是,
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 中有一个字段不是一个好主意。使用属性可以让您 encapsulate 您的数据更好。当你只是想在没有任何逻辑的情况下访问一个字段时 class 那么你可以使用自动属性。
在很多情况下,在您的 class 中使用字段会随着软件的发展而变得更糟。
例如:假设您有
public class C
{
public int Value;
}
在您的代码库中。
然后你突然意识到Value
不能设置为零。然后,您必须将 Value
设为私有并提供 SetValue()
和 GetValue()
方法。这很容易。但是等等,你现在要如何处理依赖于 Value
的所有其他代码?
但是想想这个
public class C
{
public int Value { get; set; }
}
现在它只需要像 _value
这样的支持字段并实现 setter
和 getter
。
可能是重复的问题。 我确实搜索过这个并参考了这些文章
- use of properties vs backing field inside owner class,
- should i prefer properties with or without private fields,
- Properties Matter.
我的理解是,
- 访问就像将字段设置为只读
- 我们可以在 中包含一些逻辑
- setter/getter用于数据绑定
我真正想澄清的是,
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 中有一个字段不是一个好主意。使用属性可以让您 encapsulate 您的数据更好。当你只是想在没有任何逻辑的情况下访问一个字段时 class 那么你可以使用自动属性。
在很多情况下,在您的 class 中使用字段会随着软件的发展而变得更糟。
例如:假设您有
public class C
{
public int Value;
}
在您的代码库中。
然后你突然意识到Value
不能设置为零。然后,您必须将 Value
设为私有并提供 SetValue()
和 GetValue()
方法。这很容易。但是等等,你现在要如何处理依赖于 Value
的所有其他代码?
但是想想这个
public class C
{
public int Value { get; set; }
}
现在它只需要像 _value
这样的支持字段并实现 setter
和 getter
。