2017-12-16 8 views
2

タイプが一致しないため、newを使用しないでください。 ?派生クラスプロパティを使用して仮想基本クラスプロパティをオーバーライドする方法

SearchBaseとResultBaseは、私のエンティティの80%で動作しますが、いくつかは特定の実装が必要です。

この主な問題は、newを使用すると、コンパイル時にすべてタイプされ、デバッガでよく見えますが、System.Web.Mvc.Controller.Json()にこのオブジェクトを渡すと問題が発生しているようです。

public class SearchBase<T> 
{ 
    public virtual ResultBase result { get; set; } 
} 

public class SearchImp : SearchBase<SearchImp> 
{ 
    public override ResultImp result { get; set; } 
} 


public class ResultBase 
{ 

} 

public class ResultImp : ResultBase 
{ 

} 
+0

@PranayRana私はより良い実装方法についてはわかりません。私はどんな提案にも開放的です。 – user3953989

+1

'' 'new'''キーワードを使ってプロパティをオーバーライドします...これはやや異なりますが、最後は同じです。 –

+0

共分散を使ってこれを行うことができます - それを 'public class SearchBase 'と宣言してください。しかし、私はそれがゲッターのためだけに働くと思う。 –

答えて

2

あなたが代わりにこれを使用することができます:

public class SearchBase<T, TResult> where T: ResultBase 
{ 
    public TResult result { get; set; } 
} 

public class SearchImp : SearchBase<SearchImp, ResultImp> 
{ 
    public TResult result { get; set; } 
} 


public class ResultBase 
{ 

} 

public class ResultImp : ResultBase 
{ 

} 

あなたは(ここで上書きするために、本当に何もない)、あなたはそれがタイプセーフ保つことができる何かをオーバーライドする必要はありませんこの方法です。

+0

これはまさに私が探していたものでした!ありがとう! – user3953989

関連する問題