2016-04-22 15 views
0

文字列をクラス型に変換する方法の例を見てきましたが、コンストラクタを持つクラスに同じロジックを適用できませんでしたパラメータとして使用します。これは私が他の投稿で見たものです。私が何をしたいか文字列パラメータを持つコンストラクタを持つクラスに文字列を変換する

Type type = Type.GetType("classNameAsString"); 
object instance = Activator.CreateInstance(type); 

は、私は同じことを達成することができますどのように私は通常

var exClassInst = new ExampleClass("stringParam"); 

ようでExampleClassをインスタンス化します。この場合

public class ExampleClass 
{ 
    public ExampleClass(string strParameter) 
    { 
    } 
} 

に同じを適用することですが、最初の変換します"ExampleClass"文字列を入力してインスタンス化します。ご協力ありがとうございました。

答えて

0

あなたはまだコンストラクタ引数でActivatorが、使用してCreateInstanceオーバーロードを使用することができます。

Type type = Type.GetType("Namespace.ExampleClass"); 
object instance = Activator.CreateInstance(type, "string param"); 
+0

お返事ありがとうございます。しかし、私はインスタンスを介してクラスメソッドにアクセスしようとすると、文字列パラメータを使用してインスタンスを作成すると問題はないようです.DoSomething()はエラーを受け取ります - オブジェクトにはDoSomethingの定義が含まれていません....私はクラスメソッドを見ることができます。何が起こっているのか分かりません。 – user2217057

+0

@ user2217057:これは、 'CreateInstance'がインスタンスを' object'として返すので、そのクラスの適切なメンバーを使用できるようにするには、そのインスタンスを 'ExampleClass'にキャストする必要があります。 –

+0

与えられた文字列型に基づいてループ内でクラスの型が動的に決定された場合、どのようにキャストしますか?私は何かが不足している可能性がありますが、オブジェクト型を特定のクラス型にキャストすることは、クラス型がすでにわかっている場合に機能します。 – user2217057

0

コンストラクタを検索して呼び出すことができます。

ConstructorInfo ci = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public, null, new Type[0], null); 
return (ExampleClass)ci.Invoke(new Object[] { "stringParam"); 
0

Activator.CreateInstanceをしているすでにoverload

は、使用して、指定された型のインスタンスを作成します。 が指定されたパラメータと最も一致するコンストラクタです。

public static object CreateInstance(
    Type type, 
    params object[] args 
)