0

我一直在研究这个,但我希望社区提供一些关于classVB.NET 中提供的 MessageBox 的意见。

从我的观点和目前的理解来看,我认为MessageBox是一个Class,主要是因为在 VS2010 中将它显示为一个类。我看到我们在这个类和属性中有方法。为什么很多网站、教程、书籍都将其称为函数?甚至 MSDN 也称它为MessageBox函数。仅仅是因为这是 WINAPI 的一部分吗?

现在出现的另一个问题是我更仔细地查看了 VB.NET 中的 MessageBox 类,为什么我们不必在使用之前创建 Messagebox 类型的对象。看来我们可以只调用 Messagebox 类并调出“Show”方法......

我仍处于完全理解 OOP 概念的初级阶段,我不介意关于这个特定主题的技术解释。

我正在阅读 MessageBox 函数的 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.

提到的文档是关于MessageBox在 User32.dll 中定义的本机函数。它是完全分开的。

当然,也可以某些MessageBox.NET 类型或其他类型中声明方法。基本上,相同的(不合格的)名称在不同的上下文中表示不同的事物是完全合法的。

于 2012-07-21T17:20:50.663 回答
3

在这个词的传统意义上,它不是一个类。它根本不存储任何状态,它没有任何属性。只是方法,它们都是共享的。

这通常在 VB.NET 中使用模块来处理。但这是一个高度特定的 VB.NET 功能,这个类是框架的一部分,并且可以被任何语言使用。所以它只是一个类,因为 CLR 要求方法是类的一部分。

您仍然可以使用 MsgBox() 函数。继承自 VB6,与 MessageBox 做同样的事情,并且在全局命名空间中可用。就像模块中的函数一样。

于 2012-07-21T18:21:51.537 回答
2

您引用的页面没有引用.NET框架的MessageBox类,它引用了windows api的MessageBox函数。这是两个不同的事物,即使它们具有相同的名称并处理相同的事物。事实上,如果 .NET 的 MessageBox 类的静态方法 Show 在内部编组对 windows api 的 MessageBox 函数的调用,我不会感到惊讶。

至于第二位,您可以调用 MessageBox.Show 因为 show 方法是静态的,这意味着您不需要类的实例来调用它。

于 2012-07-21T17:23:53.173 回答
1

首先MessageBox .net类不同于MessageBox Win32 API函数。

.net 中的 MessageBox 类仅具有允许您向用户显示消息的有意义的静态方法。并且要调用类的静态方法,您不需要创建实例。

也没有人将 MessageBox .NET 视为一个函数,他们只将 MessageBox.Show 方法视为一个函数。您是否将它与 Visual Basic 中的MsgBox混淆了,这确实是一个函数

于 2012-07-21T17:21:01.567 回答