0

私はこれを調査してきましたがclass、VB.NETで提供されているMessageBoxに関して、コミュニティからの意見を求めていました。

私の観点と現在の理解から、主にVS2010でクラスとして表示されるため、私はMessageBoxとして表示されます。Classこのクラスとプロパティ内にメソッドがあることがわかります。なぜ多くのウェブサイト、チュートリアル、本がこれを関数と呼んでいますか?MSDNでさえそれを関数と呼んでいMessageBoxます。これがWINAPIの一部であるという理由だけですか?

VB.NETのMessageBoxクラスをもう少し詳しく見てみると、もう1つの疑問が生じます。どうして、使用する前にMessagebox型のオブジェクトを作成する必要がないのでしょうか。Messageboxクラスを呼び出して、「Show」メソッドを起動するだけでよいようです...

私はまだOOPの概念を完全に理解している初心者の段階にあり、この特定のトピックに関する技術的な説明を気にしません。

私はメッセージボックス関数のMSDNページを読んでいましたが、これが最初にこの質問をするきっかけになりました。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

結論として、私の質問: VS2010インテリセンスがクラスとして表示するときに「MessageBox」がVB.NETの関数と見なされるのはなぜですか?

4

4 に答える 4

4

あなたはさまざまな文脈を見ています。「通常の」.NETでは、それはクラスです- System.Windows.Forms.MessageBox

参照されたドキュメントは、User32.dllで定義されたネイティブMessageBox関数に関するものでした。それは完全に別です。

もちろん、いくつかの.NETタイプまたはその他で宣言されたメソッドが存在する可能性もあります。MessageBox基本的に、同じ(修飾されていない)名前が異なるコンテキストで異なることを意味することは完全に正当です。

于 2012-07-21T17:20:50.663 に答える
3

これは、伝統的な言葉の意味ではあまりクラスではありません。状態はまったく保存されず、プロパティもありません。メソッドだけで、それらはすべて共有されます。

これは通常、モジュールを使用するVB.NETで処理されます。しかし、これは非常に特殊なVB.NET機能であり、このクラスはフレームワークの一部であり、どの言語でも使用できます。つまり、CLRではメソッドがクラスの一部である必要があるため、これはクラスにすぎません。

MsgBox()関数は引き続き使用できます。VB6から継承され、MessageBoxと同じことを行い、グローバル名前空間で使用できます。モジュール内の関数のように。

于 2012-07-21T18:21:51.537 に答える
2

参照するページは、.NET FrameworkのMessageBoxクラスを参照していません。これは、WindowsAPIのMessageBox関数を参照しています。同じ名前で同じ種類のものを扱っている場合でも、これらは2つの異なるものです。実際、.NETのMessageBoxクラスの静的メソッドShowが、Windows APIのMessageBox関数への呼び出しを内部的にマーシャルする場合でも、私は驚かないでしょう。

2番目のビットについては、showメソッドが静的であるため、MessageBox.Showを呼び出すことができます。つまり、呼び出すためにクラスのインスタンスは必要ありません。

于 2012-07-21T17:23:53.173 に答える
1

まず、MessageBox.netクラスはMessageBoxWin32API関数とは異なります。

.netのMessageBoxクラスには、ユーザーにメッセージを表示できる意味のある静的メソッドのみがあります。また、クラスの静的メソッドを呼び出すために、インスタンスを作成する必要はありません。

また、MessageBox .NETを関数と見なす人は誰もいません。また、MessageBox.Showメソッドのみを関数と見なします。確かに関数だったVisualBasicのMsgBoxと混同していませんか

于 2012-07-21T17:21:01.567 に答える