在MSDN中,提到了
http://msdn.microsoft.com/en-us/library/9fkccyh4(VS.80).aspx
我对此感到困惑是什么意思:“可以通过包含使用override修饰符的属性声明来在派生类中覆盖虚拟继承的属性”。
(这是虚拟和抽象之间的第二个区别)
提前致谢,
乔治
最佳答案
虚拟和抽象之间的唯一区别是,抽象方法或属性在定义它的类(抽象类)中没有实现,并且必须在子类中重写它;而虚拟方法或属性在定义它的类中具有实现,因此在子类中重写它不是强制性的。
public abstract AbstractClass
{
// This class cannot be instantiated, since it is
// abstract, and the class is abstract because
// it has an abstract member
public abstract MyProperty {get; set; }
}
在从AbstractClass派生的类中(上面的AbstractClass仅用于说明目的;由于它没有实现的方法/属性,因此您可以创建接口而不是抽象类),您将必须提供以下实现
MyProperty
。否则,它将无法编译。您可以通过“覆盖” MyProperty来执行此操作,您不想引入新成员,而只是为先前定义的属性提供实现。
public class ConcreteClass : AbstractClass
{
public override MyProperty {
get
{
return _someValue;
}
set
{
if( _someValue != value ) _someValue = value;
}
}