1

少し問題があります。着信文字列を特定の値について解析するメソッドがあります。値が見つかった場合、新しいクラスがインスタンス化されます。クラス名は、解析された文字列と同じです。現時点では、私のコードは次のようになっています。

Public Class Test1
End Class

Public Class Important
End Class

Public Class DoWork
Public Sub DoWork(incoming as String)
Select case incoming
case "Test1"
dim myobj as new Test1
Case "Important"
dim myobj as new Important
End Select
End Sub
End Class

「Test1」のような文字列リテラルは好きではありません。定数に格納できますが、クラス名が変更された場合は、それらも変更する必要があります。リテラルをクラスの名前に置き換える方法はありますか?me.gettypeがインスタンス化されたオブジェクトの結果を生成することは知っていますが、現時点ではオブジェクトではないクラスの単純な名前はどうでしょうか。

4

2 に答える 2

2

文字列の形式が正しい場合は、Type.GetType(string)メソッドを使用して型を取得できます。次に、その型にデフォルトのコンストラクターがある場合は、 Activatorクラスを使用してインスタンスを作成できます。

于 2012-11-15T08:13:19.517 に答える
1

Rafal の答えは、着信文字列パラメーターを使用して現在の状況に固執している場合に適しています。しかし、それはまだ少し壊れやすいです。受信パラメータが変更された場合はどうなりますか? 一部のクラスを別の名前空間またはアセンブリに移動して、コードを再構築したい場合はどうすればよいでしょうか? これらの文字列が変更された場合、クラスの名前を変更して再コンパイルする必要がありますか? マジック ストリングは明示的に表示されなくなりましたが、まだ存在しています。

自問してみてください - これらの文字列はどこから来ているのでしょうか? それらはコードによって内部的に生成されますか? その場合、文字列の代わりに、インスタンス化するクラスに対応する Enum 値を生成することができます。それらがクラスにマップする外部文字列である場合は、String->Type をマップする明示的なマッピング (たとえば、構成ファイル内) を使用することを検討してください。少し面倒ですが、はるかに柔軟です。

于 2012-11-15T10:10:21.997 に答える