いいえ、これは完全に間違った解決策です。
間違いなくデフォルトのコンストラクターが必要です。そうしないと、この方法でオブジェクトを構築するビジネスがありません。
「デフォルトではない」(ここでは「パラメータなし」を意味する「デフォルト」を使用しています) コンストラクタを使用できますが、必要なパラメータは、型だけでなく意味によっても渡す必要があります。
に頼っているので、オブジェクトActivator.CreateInstance
を除いて、問題の型についてあまり知らないと思いType
ます。この(一般的な)ケースでは、問題の型に意味があることを期待して、奇数の値をコンストラクターに渡すだけではいけません。
一方、「このタイプがコントラクト X をサポートしていることはわかっています」と言うことができる何らかのコントラクトがある場合は、インターフェイスを使用して、オブジェクトを構築した後にそのインターフェイスでメソッドを呼び出すことを検討できます。インターフェイスには既知のメソッド (インスタンスを構築する必要があるコードに知られている) があり、既知の (その数、型、および意味を知ることで知られている) パラメータを使用して呼び出すことができます。
ランダムに (0 を渡しnull
て署名を満たすためだけに 42 といくつかの奇妙なオブジェクトを渡すのと同じくらい恣意的です) パラメーターをコンストラクターに渡すことは、まったく安全ではありません。
インターフェイスの例:
object instance = Activator.CreateInstance(someTypeObject);
((ISomeInterface)instance).Initialize(your, specific, parameters, here);
「誰かがこのクラスのインスタンスを必要とするときはいつでも、ここでそれを構築する方法があります」と言うことができるように、必要になるのは IoC フレームワークです。
調べる: