2009-09-05 13 views
11

this codeの用途はわかりません。このパターンはどんな使い方ですか?このコードはどのような用途ですか?

私が見ることができる何の使用はありません

public class Turtle<T> where T : Turtle<T> 
{ 
} 
+13

そのカメはいっぱいです... – Juliet

+0

これは?私は何かが欠けている必要があります... –

+4

あなたが私に尋ねる場合は、より多くのカメが必要です。 – Corey

答えて

9

このパターンは、親クラスの具体的なサブクラスを参照することができます。たとえば :対

public abstract class Turtle<T> where T : Turtle<T> 
{ 
    public abstract T Procreate(); 
} 

public class SeaTurtle : Turtle<SeaTurtle> 
{ 
    public override SeaTurtle Procreate() 
    { 
     // ... 
    } 
} 

:元に

public abstract class Turtle 
{ 
    public abstract Turtle Procreate(); 
} 

public class SnappingTurtle : Turtle 
{ 
    public override Turtle Procreate() 
    { 
     // ... 
    } 
} 

SeaTurtleの赤ちゃんがSeaTurtleになることを指定します。

+0

コントラバリエーションがサポートされていれば、このようなことは必要ないと思いますか? – shahkalpesh

+1

多くの用途があります。サブクラスのインタフェースを実装することができます。同様に、Javaでは、 'java.lang.Enum'はパターンを使用してサブクラスに' java.lang.Comparable'を実装します。私はC#に何か類似していると確信しています。 –

+0

確かに他の用途もありますが、それらはすべて、そのサブクラスの型を使用する必要のある親クラスに関係しています。インターフェイスの実装に関して、2つの選択肢があります:Tまたはタートルのインターフェイスを実装する。 IComparable は、IComparable >がタートルを比較できるようにする同じサブクラスのアイテムだけを比較させます。そして、.NET 4.0のIComparable はTに反変わるので、T:Turtle のため、IComparable >をIComparable として使用することができます。 – dahlbyk

-1

[コードは、後世のためにここで繰り返します]。基本的には同じです

public class Turtle 
{ 
} 
+1

与えられたコードでは、「Turtle」はインスタンス化できないので、同じではありません。 – strager

+1

はい、できます。Marc Gravellのコメントはこちらhttp://stackoverflow.com/questions/194484/whats-the-strangest-corner-case-youve-seen-in-c-or-net/1332344#1332344 –

+0

@レベスク、RCIXのコメントを参照してください。 – strager

関連する問題