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