2012-03-11 22 views
-1

に制限するには:ジェネリック医薬品は、私が法持つ基底クラス

private double FindPrice<T>(T l_Price_Breaks) where T : ? 
{ 
} 

を、私は3つのクラスクラスと呼ばれる子からinheric X、Y、Zのこれらの三つのクラスに限定したい?それは作品

private double FindPrice<T>(T l_Price_Breaks) where T : Child 
{ 
} 

が、私は次を使用してこのメ​​ソッドを呼び出すしようとすると::

public class X : Child 
public class Y : Child 
public class Z : Child 

私はちょうど行うことはできません

X MyX = new X(); 
double return = FindPrice(MyX); 

「Xから子への暗黙の変換はありません」というメッセージが表示されます。

+6

コンパイラが 'X'から' Child'への変換がないと言うなら、私はそれが正しいと確信しています。問題を示す短い*完全な*プログラムを投稿することができれば、それは役に立ちます。 (あなたが投稿したコードは有効ではありません - あなたは 'public'の代わりに' Public'を2回使用し、識別子として 'return'を使用しようとしました。) –

+1

構文を修正した後でも、与えられたサンプルと一緒に - これはうまくいくはずです。 – BrokenGlass

+2

'Child'という基本クラスを持っています...それは間違っています。 – Kobi

答えて

1

このコードは1つ例外があります:returnという変数名がありますが、これは動作しません。なぜならこれはc#の予約済みのキーワードなのでです。名前をresultに変更します。

0

あなたはFindPriceの実装のようないくつかの重要な情報が欠落しているが、私はあなたがFindPriceメソッドの本体にChild代わりのTを使用しているの推測を取りますよ。

1

することができますが、あなたはあなたのコードで問題の別の束を持って、識別子が期待

等。 'return'はキーワードです。

Public

は、あなたがそれは罰金コンパイルこの

class GenericTest 
{ 
    public class Child { } 
    public class X : Child { } 
    public class Y : Child { } 
    public class Z : Child { } 


    private double FindPrice<T>(T l_Price_Breaks) where T : Child 
    { 
     return 2; 
    } 

    private void foobar() 
    { 
     X MyX = new X(); 
     double retValue = FindPrice(MyX); 
    } 
} 

のようなあなたのコードを書き換える場合など

publicする必要があります。

関連する問題