2


0

C#ジェネリック-派生クラスのオブジェクトを返しますか?
public class BaseClass{
  public static T Find(object value){
     -- db.get("params", value);
  }
}

public class Derived: BaseClass{
}

...
void someMethod(){
  Derived obj = Derived.Find(1);
}

上記のコードで、「Derived obj = Derived.FindDerived(1);」を「Derived obj = Derived.Find(1);」に変更するにはどうすればよいですか

3 Answer


4


メソッドのシグネチャがこのようなものであった場合

public static T Find(T value)

次に、メソッド呼び出しで型を省略できます。 ただし、指定された署名から、コンパイラは明示的に指定しないと型を推測できません。


2


多くの場合、コンパイラーは型パラメーターを識別できますが、それらは省略できますが、すべての場合ではありません。 戻り値はメソッドシグネチャの一部ではないため、戻り値はサポートされていないケースの1つに過ぎないと思います。

http://blogs.msdn.com/ericlippert/archive/2007/11/05/c-3-0-return-type-in​​ference-does-not-work-on-member-groups.aspx [こちら]はエリックです同様の問題に関するLippertのブログ投稿。


2


BaseClassをジェネリッククラスに変更することで、これを削除できます。

public class BaseClass {
    public static T Find(object value){
         -- db.get("params", value);
    }
}

public class Derived: BaseClass {

    void someMethod(){
      Derived obj = Derived.Find(1);
    }
}