定义类的属性

时间:2010-06-25 17:40:47

标签: c# properties

有人可以告诉我

之间的区别
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; }
    }
}

使用私有变量有什么好处吗?这样做只会浪费时间和线条吗?在课堂上没有对该属性进行任何操作。

由于

4 个答案:

答案 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的起始值,以及后备变量对您不可见的事实自动属性版本中的类)。所以,不,除了在声明中设置初始值的能力之外,使用完全声明的属性没有特定的好处(正如您在示例中所做的那样)。

如果可能的话,我总是喜欢自动属性,因为冗余代码的减少(毕竟这就是为什么它们在那里)。如果需要,可以很容易地在构造函数中设置默认值。