在C#中,属性需要引用私有成员变量,还是只需声明属性并直接在类代码中使用它们?
如果前者是最佳做法,那么这会排除使用C#属性的短手吗?即
public string FirstName { get; set; }
答案 0 :(得分:27)
属性,实现时如下:
public string FirstName { get; set; }
自动创建私有成员变量(编译器会为您执行此操作),因此您不必担心它。这将与您执行的操作完全相同:
private string firstName;
public string FirstName {
get { return firstName; }
set { firstName = value; }
}
没有理由不使用自动属性({get; set;})。提供与创建自己的私有成员变量相同的优点。
此外,如果您以后决定需要进行额外处理(例如,如果您决定在属性设置器中实现INotifyPropertyChanged),则可以在不更改公共API的情况下添加此项,但需要手动添加支持字段。
答案 1 :(得分:2)
您不需要属性来访问私有字段,但通常认为这是最佳做法。
您可以使用自动属性(简写),直到您需要为属性添加更多功能,例如验证。将其更改为“真实”属性始终是一个不间断的变化。
答案 2 :(得分:2)
像这样创建的属性
public String Caption{ get; set; }
这将编译为
[CompilerGenerated]
private string <Caption>k__BackingField;
public string Caption
{
[CompilerGenerated]
get
{
return this.<Caption>k__BackingField;
}
[CompilerGenerated]
set
{
this.<Caption>k__BackingField = value;
}
}
使用反射器工具编译后提取上述代码。
答案 3 :(得分:0)
他们不需要引用私有成员变量。您可以直接在课堂上使用它们。
答案 4 :(得分:0)
C#可以引用私有变量,如:
public class A
{
private string _b;
public string B
{
get { return _b; }
set { _b = value; }
}
}
get; set;指定是自动属性,在编译时会为您生成私有变量,以便于设置代码。
答案 5 :(得分:0)
属性不需要引用私有成员变量。但是,最佳做法是让他们这样做。如果属性更容易理解,您可以将属性视为方法。您可以在其中运行代码。您可以随意返回任何内容。您可以调用方法并使用私有成员变量。你甚至可以简单地返回一个常量。
我几乎在所有情况下都使用私有成员变量。它允许我创建一个只读属性,或者为我的类以外的人提供一些规则来获取或设置我的课不必遵循的属性。
答案 6 :(得分:0)
要添加到Reed的答案,在代码内部(在类本身内),成员函数应该遵循这个并实际使用Property而不是实际的私有成员。例如,如果你有这个:
public string FirstName { get; set; }
你有一个叫做公共字符GetFirstLetter()的奇怪方法,它以一个人的名字返回第一个字母你想要这样做:
public char GetFirstLetter()
{
return FirstName[0];
}
而不是实际使用您的私有变量。当您设置属性时,程序员可能已编写代码以特定方式设置它。因此,只在类方法中使用该属性才有意义。
答案 7 :(得分:0)
如果您使用
public string FirstName { get; set; }
编译器会自动为此属性自动添加getter和setter。这不是一个坏习惯。
这是证据
如果您声明
private string firstName;
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
像这样,编译器也会将其视为
所以它不排除...... :)。
答案 8 :(得分:0)
使用属性是为类中的属性提供控制和安全性的最佳方法,如果可能,请始终将属性保持为私有。