実行時にクラスFooから継承するオブジェクトを作成することになっているファクトリがあります。System.Activator.CreateInstanceの戻り型は、作成しているオブジェクトの型と同じだと思いますが、次のエラーメッセージから判断すると、戻り型はObjectです。
エラー1タイプ'object'を'cs_sandbox.Foo'に暗黙的に変換できません。明示的な変換が存在します(キャストがありませんか?)F:\ projects \ cs_sandbox \ Form1.cs 46 24 cs_sandbox
さて、キャストが足りないかもしれませんが
return (t)System.Activator.CreateInstance(t);
その結果、さらに別のエラーメッセージが表示されますが、これは-私は認めなければなりません-私には意味がありません。
エラー1タイプまたは名前空間の名前't'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)F:\ projects \ cs_sandbox \ Form1.cs 45 25 cs_sandbox
そして、これが私のコードです:
class Foo { }
class FooChild1 : Foo { }
class FooChild2 : Foo { }
class MyFactory
{
public static Foo CreateInstance(string s)
{
Type t;
if (s.StartsWith("abcdef"))
{
t = typeof(FooChild1);
return System.Activator.CreateInstance(t);
}
else
{
t = typeof(FooChild2);
return System.Activator.CreateInstance(t);
}
}
}
このコードを修正するにはどうすればよいですか?または、修正できない場合、実行時に特定のクラスから継承するオブジェクトを作成する他の方法は何ですか?