在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;
       }
}

08-27 06:13