有人可以告诉我
之间的区别public class Vendor
{
public string VendorName { get; set; }
}
和
public class Vendor
{
private string vendorName = string.Empty;
public string VendorName
{
get { return vendorName; }
set { vendorName = value; }
}
}
使用私有变量有什么好处吗?这样做只会浪费时间和线条吗?在课堂上没有对该属性进行任何操作。
由于
答案 0 :(得分:5)
如果这就是你所做的一切,那就没有任何好处,IMO。
这些代码块之间的显着差异是第一个默认为null,第二个默认为string.Empty。
除此之外,我每次都会选择自动属性(选项1)。它是在C#3.0中添加的东西。
答案 1 :(得分:2)
无。我发现auto-propeties可以很好地清理代码;特别是在具有较大属性的类中。
修改
有人要记住,如果你使用一个值来指定空值(即当持久化到数据库;如果DateTime等于DateTime.MinValue,将NULL保存到数据库中),你需要声明这个在构造函数中。
示例示例
而不是
public class Vendor
{
private DateTime deletedDate = DateTime.MinValue;
public DateTime DeletedDate
{
get { return deletedDate ; }
set { deletedDate = value; }
}
}
你需要这样的东西:
public class Vendor
{
public DateTime DeletedDate { get; set; }
public Vendor()
{
DeletedDate = DateTime.MinValue;
}
}
答案 2 :(得分:2)
C#3引入了自动实现的属性,这使您的第一个代码段成为可能。编译器将为您创建支持字段,这将使编译的代码等同于第二个代码段的编译代码。如果你在< = 2.0代码库中工作,那么你将使用第二个代码段。
使用私有变量的好处是,如果在设置属性时执行某种验证,例如将整数限制为正值或拒绝空字符串。如果您不需要此类行为或只是希望在其他地方处理这些活动,并且该属性只是一个提取和设置,那么请使用自动实现的版本。
答案 3 :(得分:1)
鉴于您的样本,两者在语义上是相同的(除了第一个null
的起始值和第二个string.Empty
的起始值,以及后备变量对您不可见的事实自动属性版本中的类)。所以,不,除了在声明中设置初始值的能力之外,使用完全声明的属性没有特定的好处(正如您在示例中所做的那样)。
如果可能的话,我总是喜欢自动属性,因为冗余代码的减少(毕竟这就是为什么它们在那里)。如果需要,可以很容易地在构造函数中设置默认值。