5

次のコードを検討してください。

class Program
{
    static void Main(string[] args)
    {
        var instance = Activator.CreateInstance<Person>();//No parameterless constructor defined for this object.

    }
}

public class Person
{
    public Person(string name = "Shahrooz") { }
}

このコードActivator.CreateInstance<Person>();を使用すると、次のエラーが発生します。

このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。

私のコンストラクターにはデフォルトのパラメーターがあることに注意してください: string name = "Shahrooz"

コンストラクターにデフォルト値パラメーターがあるにもかかわらず、コンストラクターを持つクラスからインスタンスを作成できないのはなぜですか?

4

1 に答える 1

8

コンストラクターを持つクラスからインスタンスを作成することはできません。これは、コンストラクターがデフォルトであっても、パラメーターが 1 つ必要なためです。GetParameters()ただし、初期要素を呼び出してアクセスすることで、デフォルト値を取得できます。

ConstructorInfo constr = typeof(Person).GetConstructor(new[] {typeof(string)});
ParameterInfo p0 = constr.GetParameters()[0];
object defaultValue = p0.DefaultValue;
Person p = (Person)constr.Invoke(new[] {defaultValue});
// ...or using Activator
Person p = (Person)Activator.CreateInstance(typeof(Person), defaultValue);
于 2013-09-14T10:38:01.803 に答える