据我所知,属性用于提供访问器方法特性功能;但是,它们是以正常的方法继承行为为代价的。使用属性与传统的setter / getter方法相比有什么优势吗?属性和访问方法的优缺点是什么?
答案 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方法。也就是说,属性访问器在不可预测的时间执行,因此不应引起任何可辨别的副作用。滥用属性可能导致难以解决的错误。
使用方法的另一个原因是可能会对订单检索进行参数化。
一个好的做法是财产获取在计算上便宜;不应强制客户端代码将属性值放入局部变量 - 这是过早的优化。