型をパラメーターとして渡すメソッドを設定しました
private void SomeMethod(System.Type type)
{
//some stuff
}
特定の基本クラスから継承する型のみを渡すことができるように型を強制する方法はありますか?
関数をジェネリックにして、ジェネリック型パラメーターを介して型パラメーターを渡してみてください。
private void SomeMethod<T>() where T : U {
Type type = typeof(T);
// some stuff
}
ここにリストされている任意の型制約を使用できます。
任意の型のオブジェクトを処理する必要がある場合 (たとえば、関数を呼び出す人を制御できない場合)、おそらく実行時アサーションを使用する必要があります。
private void SomeMethod(System.Type type)
{
if(!typeof(U).IsAssignableFrom(type)) {
throw new ArgumentException("type must extend U!");
}
Type Restriction に関するこの質問も参照してください。
多くの可能性があります...
インスタンスベース:
private void SomeMethod(object list) // total generic
になる
private void SomeMethod(IEnumerable<object> list) // enumerable-generic
また
private void SomeMethod(List<object> list) // explicit list
OR 汎用関数:
private void SomeMethod<T>() where T : MyType // << contraints
{
var theType = typeof(T);
}
それを呼び出します:
var xyz = SomeClass.SomeMethod<string>(); // for example
制約の詳細については、http: //msdn.microsoft.com/en-us/library/d5x73970 (v=vs.80).aspx を参照してください。