C# - 属性与访问方法?

时间:2012-10-31 16:46:53

标签: c# inheritance properties

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

2 个答案:

答案 0 :(得分: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方法。

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

答案 1 :(得分:0)

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

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

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