0

抽象クラスを暗示する基本プログラムがあります。

public abstract class AbstractClass
{
    public AbstractClass (MyObject object1, MyOtherObject object2)
    {
        Console.WriteLine("This is the abstract class");
    }

    public abstract bool Function1();
    <other abstract functions>
}

現在、さまざまなことを実行したいときに、アプリケーションの個別のバージョンをビルドしてコンパイルし、これらのことに対してさまざまな抽象クラスを実装しています。これは退屈だと思います。

このコード行を取得できるようにしたいと思います

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return new NotAnAbstractClass(obj1, obj2);
}, true);

そしてそれを次のようなものに変更します:

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return new System.Activator.CreateInstance(Type.GetType(config.NonAbstractClassName), new object[] { obj1, obj2 });
}, true);

config.NonAbstractClassName構成ファイルで提供される文字列はどこにありますか。ただし、これは次のエラーで失敗します。 'System.Activator.CreateInstance(System.ActivationContext, string[])' is a 'method' but is used like a 'type'

obj1obj2は文字列ではありません。それらはクラスです。

これどうやってするの?

4

2 に答える 2

2

new前を取り除くCreateInstance

new MySuperSpecialClassOfThings(param1, (MyObject obj1, MyOtherObject obj2) => 
{
    return (AbstractClass)System.Activator.CreateInstance(Type.GetType(config.NonAbstractClassName), new object[] { obj1, obj2 });
}, true);
于 2012-10-30T02:53:05.793 に答える
1

「new」キーワードを削除するだけです。CreateInstanceは、パラメータのタイプに基づいてオブジェクトの新しいインスタンスを返します。したがって、基本的に「new」キーワードは必要ありません。

于 2012-10-30T03:53:23.457 に答える