2017-07-03 7 views
0

私は2つのレガシーコード間のギャップを埋めることに専念しています。私はそれが重要かどうか分からないが、レガシーの2つの部分は、私のコードが動作する別のDLLに住んでいるVB.Netで書かれています。クラス名のクラスのCRUDにアクセス

2番目のコードにブリッジを残しても問題ありません。私の問題は、レガシーコードの最初の部分にあります。私がこのコードを残すポイントは、問題のクラスの文字列名です。それを "アルファ"と呼んでください。

は、私は、オブジェクトを取得するためにリフレクションを使用することができます知っている:

object obj = Activator.CreateInstance(null, "Alpha"); 

問題は、私は

obj.NewRow(); 
obj.Save(); 

私はことを示すコンパイルエラーを取得するクラスのメソッドのいずれかにアクセスすることができないようです#〜msgstr "" 'オブジェクト'には〜の定義が含まれていません "それぞれのメソッドは試してアクセスします。

私はこれが可能であると確信し、私はおそらくそれについてすべて間違っています。私は明らかに何かが欠けているので、どんな助けもありがたいです。

+1

ちょうどインスタンス化したタイプにオブジェクトをキャストする必要がありますか? –

+0

あなたはたぶんインスタンスを 'Alpha'クラスにキャストする必要があります。おそらくオブジェクトの代わりに 'var obj'を試すことができます – Pikoh

+1

@Pikoh' var'はおそらく動作しません。なぜなら、ここでそのタイプを推論する方法がないからです。 –

答えて

5

結果を適切な型にキャストする必要があります。

var obj = (Alpha)Activator.CreateInstance(null, "Alpha"); 

そうしないと、あなただけのobjectCreateInstanceによって返されたタイプ)を持っています。

dynamic obj = Activator.CreateInstance(null, "Alpha"); 

をしかし、あなたはコンパイル時に型チェックを失うdynamicを使用していることを注意して:あなたは、クラス自体への参照を持っていない場合は、dynamicを使用することができます。この理由から、第1の解決策が好ましい。

関連する問題