2016-05-11 10 views
0

/*???*/(それ以外の場合はfirstclass)には、継承するすべてのクラスでオーバーライドすることなく、呼び出すクラスの型を返すことができますこのメソッドには、すべての用途に接頭辞なしで(secondclass)が付いています。基本的にはthis.GetType()の意味ですか?継承したクラスの戻り値の型を持つ継承されたメソッド

public class firstclass 
{ 
    private static /*???*/ current; 
    public static /*???*/ modifycurrent() 
    { 
     /*do stuff to current*/ 
     return current; 
    } 
} 
public class secondclass : firstclass 
{ 
    //nothing concerning the above 
} 

//usage 
secondclass a = new secondclass(); 
secondclass b = a.modifycurrent(); //<--no cast here 

目標は、タイプsecondclassの変数を共有するsecondclassのすべてのインスタンスに対してです。そして、私がfirstclassから継承している3番目、4番目、5番目のクラスを作るときには、戻り値のタイプがmodifycurrent()であること以外は、firstclassの正確なミラーであるこれらのメソッドをすべて書き直す必要はありません。この例では、以前に開かれたインスタンスを追跡するすべてのタイプのフォームがあります。静的メンバが継承されていないので、私はstaticを脱い

public class firstclass<T> where T:firstclass 
{ 
    private T current; 
    public T modifycurrent() 
    { 
     /*do stuff to current*/ 
     return current; 
    } 
} 
public class secondclass : firstclass<secondclass> 
{ 
    //nothing concerning the above 
} 

注:あなたは不思議経常テンプレートのパターンを使用するように

+1

modifycurrentは静的なので、クラスインスタンスを介して呼び出すことはできません...とにかくあなたが求めるものは奇妙です、あなたは何を達成したいのですか? –

+0

aとbは2番目のクラスですか?キャスティングは全くありません。私はあなたが達成しようとしていることを理解できません。おそらくbはfirstclassですか? – Gusman

+0

この種の問題を解決しようとするときは、元の問題を解決する代わりに、コードを別の方法で書き直してください。 –

答えて

1

はそれが鳴ります。

それはあなたが行うことができますよう完全フールプルーフではありません。

public class thirdclass : firstclass<secondclass> 
{ 
    //nothing concerning the above 
} 

currentはまだsecondclassのインスタンスを返します。継承者が汎用パラメーターとして独自の型を使用するような仕組みはありません。

+0

これは良いですが、新しく作成された 'secondclass'が以前に作成された静的クラスに関する情報を持つ方法であるため、静的である必要があります。 – gunfulker

+0

次に、静的メンバーは継承されないため、いいえ。あなたはメソッドを汎用にすることができますが、それらのメソッドに何があるかわからないと、そのメソッドが実行可能なオプションであるかどうかは言えません。 –

関連する問題