3

私は主にC#開発者ですが、VB.Netアプリケーションでサポートを行っています。私は「奇妙な」コードと見なすものに遭遇しました。C#の考え方では、コードが間違っているのでコンパイルすべきではないと言われていますが、コンパイルはできます。特定のフォームのすべての参照を検索して、そのフォームが使用されている場所を確認し、クラスがインスタンス化されずにクラスの非シュレッドメソッドが直接参照されているフォームへの参照を見つけました。言い換えれば、私はこのようなコードを見ます:

FrmCareer.ShowDialog(careerId)
FrmCareer = Nothing

現在、 ShowDialogは共有メンバーではなく、インスタンスメンバー変数を参照しているため、インテリセンスがShowDialogメソッドを一覧表示することはまったく期待できません。しかし、それは実行され、コンパイルされます。誰かがここで何が起こっているのか説明できますか?

4

2 に答える 2

6

VB.NET には、すべてのフォームのコレクションをオブジェクトの下のプロパティとして保持する (非常に優れた) 機能がありMy.Formsます。そこにあるオブジェクトは、最初にアクセスしたときにインスタンス化されます。このようにして、参照できる各フォームの既定のインスタンスを取得します。

あまり良い面ではありませんが、VB はMy.Formsオブジェクトのプロパティをグローバルにインポートすることを主張しており、それを変更するためにできることは何もありません。

つまり、アプリケーション内の任意のフォームのクラス名は、そのフォームのグローバル インスタンスとしても機能します。

于 2012-05-27T22:21:28.190 に答える
1

FrmCareerフォームの名前ですか?もしそうなら、このようにアクセスできるすべてのフォームには、一種の魔法の「シングルトン」のような変数があると思います。開発者はおそらく 1 つだけを必要とFrmCareerするため、どのコードでもこのようにアクセスできます (この場合はフォームを表示するため)。C# の用語で言えば、グローバル スタティックのようなものです。

ああ、この質問を参照してください- より良い説明があります。

于 2012-05-27T22:14:50.330 に答える