1. ホーム
  2. c#

[解決済み] 汎用型パラメータで静的メソッドを呼び出す

2022-09-25 11:06:09

質問

このようなことをしたかったのですが、C#では違法なようです。

public Collection MethodThatFetchesSomething<T>()
    where T : SomeBaseClass
{
    return T.StaticMethodOnSomeBaseClassThatReturnsCollection();
}

コンパイル時エラーが発生します。

'T' は '型パラメータ' であり、与えられたコンテキストでは有効ではありません。

ジェネリック型のパラメータが与えられた場合、ジェネリッククラスのスタティックメソッドをどのように呼び出すことができますか? 制約を考えると、静的メソッドは利用可能でなければなりません。

どのように解決するのですか?

この場合、制約を受けた型のスタティックメソッドを直接呼び出せばよいのです。 C#(およびCLR)は仮想静的メソッドをサポートしていません。そのため

T.StaticMethodOnSomeBaseClassThatReturnsCollection

...と変わらないことができる。

SomeBaseClass.StaticMethodOnSomeBaseClassThatReturnsCollection

一般型パラメータを経由することは不要なインダイレクトであり、それゆえサポートされません。