受保护的成员字段及其属性

时间:2014-01-02 12:01:54

标签: c# .net

假设您有以下A类定义:

class A
{
   protected double[] _temperatures;

   double[] Temperature
   { 
      get {return _temperatures;} 
      set {_temperatures = value;}
   }
}

如何访问派生类B中的温度?使用成员字段或属性?我应该将_temperatures声明为private并始终使用该属性吗?使用属性而不是直接成员字段访问的开销是多少?

感谢。

4 个答案:

答案 0 :(得分:4)

您应该使用该属性并将该字段设为私有。但是,如果您确实需要在gettersetter中添加一些自定义逻辑,那么使用自定义私有字段的代码才有意义。所以对于你的简单案例,你可以这样做:

class A
{
   protected double[] Temperature { get; set; }
}

答案 1 :(得分:0)

是将数据成员更改为私有。使用Property而不是Field(私有成员)是一种更好的方法来访问它,即使它来自同一个类,这样如果你在getter / setter中有一些逻辑,你不必每次设置都重复它价值。

即使您没有逻辑,也可以使用属性,因为将来可能需要添加一些逻辑。它将成为获取和设置值的单一入口点。

是的,凯文建议你可以使用自动实现的属性,如果你没有自定义逻辑。

答案 2 :(得分:0)

您可以像这样修改代码:

class A
{
    private double[] _temperatures;

    public double[] Temperature
    {
        get { return _temperatures; }
        set { _temperatures = value; }
    }
}
class B : A
{
    public B()
    {
        B b = new B();
        Console.WriteLine(b.Temperature);
    }
}

本地变量' _temperatures'应该是私人和财产'温度'应该是公开的还是受保护的。

答案 3 :(得分:0)

理想情况下,一个类不应该将其成员(在您的情况下为_temperatures)暴露给外部世界。成员应该在课堂内部使用。如果要公开类成员,请使用属性。这是设计课程的理想方式。

这种类设计的优点是明天假设在分配值或从类成员中检索值时需要添加一些逻辑,然后可以在不重新设计接口的情况下轻松地在属性中容纳它。 / p>

声明_temperatures as private并通过将属性Temperature声明为受保护的方式将其公开给派生类。

请参阅此C# tutorial了解更多信息: