2011-07-29 7 views
0

**はじめに私はジェネリック医薬品に非常に新しいです。私はジェノと呼ばれるクラスを作りました。 My Penoクラスには文字列Nameプロパティが含まれています。私はなぜこのクラスのメソッド内からT.Nameを呼び出せないのだろうかと思います。 Tのプロパティにはどうすればアクセスできますか?これがどのように機能するかについての良い情報はありますか?C#継承型を受け入れるジェネリッククラス。

public class Geno<T> where T : Peno 
{ 

} 

public string GetName() 
{ 
    return T.Name; 
} 
+1

Tはタイプであり、インスタンスではありません。 – deepee1

+1

なぜdownvote?彼はジェネリック医薬品には新しく、彼らがどのように働いているのかという良い質問をしていると言いました。 –

答えて

4

Nameプロパティは、インスタンスプロパティまたは静的プロパティですか?それが静的なプロパティの場合は、とにかく多態性を取得しない - ちょうどPeno.Nameを呼び出すことができます。

インスタンスプロパティの場合、それを呼び出すインスタンスが必要です。例:

public class Geno<T> where T : Peno 
{ 
    private readonly T value; 

    public Geno(T value) 
    { 
     this.value = value; 
    } 

    public string GetName() 
    { 
     return value.Name; 
    }  
} 

これが解決しない場合は、実行しようとしている内容の完全な例を挙げてください。

+1

ああ...タイピング中に私はすでに "急いで!あなたはJon Skeetより速くなければならない!"と思った。おそらく次回! ;-) – Achim

2

Tは、タイプPenoです。あなたがしようとしているのはPeno.Nameです。これはおそらくあなたが望むものではありません。このようなものは動作します:

public string GetName(T t) 
{ 
    return t.Name; 
} 
0

静的プロパティは継承をサポートしていません。したがって、Tに行くのではなく、Peno.Nameを呼び出すことができます。

通常のプロパティにアクセスする場合は、プロパティ名を呼び出せるようにTのインスタンスを作成する必要があります。

0

Tはこの良い例が、あなたは、これはあなたがそのリストを作成していることリスト、と言うList<T>であるT.

を使用しているクラスに渡されていないパラメータジェネリック型パラメータであり、 String型のオブジェクトを含んでいます。