1

据我所知,属性用于提供访问器方法式的功能;然而,他们这样做是以牺牲正常的方法继承行为为代价的。与传统的 setter/getter 方法相比,使用属性有什么优势吗?属性和访问器方法的优缺点是什么?

4

2 回答 2

1

我想你可能会感到困惑。在您的示例中,上述方法应该可以访问。例如,给定这组类型,以下应该有效:

public class Base
{
    public virtual int Datum { get; set; }
}

public class Derived : Base
{
    public override int Datum
    {
        get { return 12; }
        // set method remains as normal, with just the get overriden
    }

    public void SetDatumMethod(int newValue)
    {
        Datum = newValue; // Datum as a property is still accessible
    }
}

派生类仍然继承该属性。属性实际上只是 C# 中的语法糖(大多数情况下),因为编译器正在为您生成幕后的方法set_Datum(int x)get_Datum()如上所示,仍然可以单独覆盖属性 get/set 方法。

使用属性的好处是它们具有额外的语义含义;它们以某种方式“包含”或“表示”数据,而不是生成数据的方法。

于 2012-10-31T16:51:57.187 回答
0

Visual Studio 调试器在观察对象时执行 getter 方法。也就是说,属性访问器在不可预测的时间执行,因此不应导致任何可辨别的副作用。滥用属性会导致难以解决的错误。

使用方法的另一个原因是订单检索可能是参数化的。

一个好的做法是让财产访问在计算上变得便宜;不应强制客户端代码将属性值放入局部变量 - 这是过早的优化。

于 2012-10-31T16:51:42.450 回答