2016-09-27 3 views
-1

コードは言葉以上のものを伝えますので、これを見て:どのように正しくオーバーライドし、強化財産

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

それは、はい(抽象クラ​​スで基本実装の所望の動作を実装するための正しい方法は何ですかこれのためのベースの実装を持っている必要がありますが、他のもののためではありません)?

overrideの代わりにnewキーワークを使用して、基本的な実装を隠すことしか考えられませんが、これは正しいですか?

答えて

-1

newキーワードを使用して、派生オブジェクトを基底クラスにキャストすると、基本実装が呼び出され、派生オブジェクトは呼び出されません。これを避けるには、overrideが必要です。

これは現在できません。基本クラスがセッターをサポートしていないためです。だからoverrideに固執し、を単に投げる基本クラスにsetメソッドを実装します。

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

あなたはすでに継承を使用しています。オーバーライドメソッドは、メソッド名とパラメータが同じ場合に便利です。 ここでメソッドのオーバーロードを使用できます。メソッドオーバーロード名の場合は は同じですが、パラメータが異なります。あなたは継承でも使うことができます。 これが便利だといいですか?

関連する問題