実際、最後の行を書き込むことはできません。
しかし、オブジェクトを作成したり作成したりするのではなく、オブジェクトを作成したいと思うかもしれません。新しく作成されたインスタンスでいくつかのメソッドを呼び出すことをお勧めします。
あなたは、インターフェイスのようなものが必要です:
public interface ITask
{
void Process(object o);
}
public class Task<T> : ITask
{
void ITask.Process(object o)
{
if(o is T) // Just to be sure, and maybe throw an exception
Process(o as T);
}
public void Process(T o) { }
}
をし、それを呼び出します。いずれにせよ
Type d1 = Type.GetType("TaskA"); //or "TaskB"
Type[] typeArgs = { typeof(Item) };
Type makeme = d1.MakeGenericType(typeArgs);
ITask task = Activator.CreateInstance(makeme) as ITask;
// This can be Item, or any type derived from Item
task.Process(new Item());
、あなたは静的に、あなたが「ドン型にキャストされることはありませんあらかじめ知っている(この場合は "makeme")。 ITaskを使用すると、目標のタイプに到達することができます。
これがあなたの望むものでない場合は、おそらくこれで達成しようとしていることに少し具体的にする必要があります。
バックティックが必要ですか?つまり、省略されている場合、コンパイラはそれを1と見なしますか? – richard
私のブログ記事 "Reflectionを使用してC#.Netの一般的なクラスをインスタンス化する"(http://omegacoder.com/?p=38)を「簡単な例」としてリンクしていただきありがとうございます。 :-)私は記事が新しい人生を見つけることがうれしいです。 – OmegaMan
'is'キーワードを使ってジェネリック型を比較するには? –