如何正确覆盖和增强属性

时间:2016-09-27 09:05:04

标签: c# .net oop

代码不仅仅是单词,所以请看:

public abstract class ViewObject: INotifyPropertyChanged {
  public virtual string Id {
    get {
      return this.GetType().Name;
    }
  }
}

public class Object : ViewObject {
  private string id = string.Empty;
  public override string Id {
    get {
      return this.id;
    }
    set {
      this.id = value;
    }
  }
}

在抽象类中实现基本实现的所需行为的正确方法是什么(是的,它应该有一个基本实现,但不能用于其他事情)?

我只能考虑使用new键而不是override来隐藏基本实现,但这是对的吗?

2 个答案:

答案 0 :(得分:0)

您已经在使用继承。当方法名称和参数相同时,覆盖方法很有用。 在这里你可以使用方法重载。 for method overload name相同但参数不同。你也可以在继承中使用。 我希望这很有用

答案 1 :(得分:-1)

如果使用new关键字并且某人将派生对象强制转换为基类,则将调用基本实现而不是派生实现。为避免这种情况,需要override

但目前这是不可能的,因为你的基类不支持setter。所以坚持使用override并在基类中实现一个set方法,只抛出NotSupportedExecption

public abstract class ViewObject
{
    public virtual string Id
    {
        get { return this.GetType().Name; }
        set { throw new NotSupportedException(); }
    }
}

public class Object : ViewObject
{
    private string id = string.Empty;
    public override string Id
    {
        get { return this.id; }
        set { this.id = value; }
    }
}