gpt4 book ai didi

c# - 在 C# 和 VB.NET 中传递参数

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:47 25 4
gpt4 key购买 nike

在 VB.NET 中,我们可以将原始对象作为参数传递而不对其进行实例化吗?比如我的项目中有formA和formB两种形式。现在我有了这段代码。

Public Sub AddForm(Form Outer, Form Inner)
Inner.FormBorderStyle = FormBorderStyle.None
Inner.TopLevel = False;
Inner.Dock = DockStyle.Fill
Inner.WindowState = FormWindowState.Normal
Outer.Controls.Add(Inner)
Inner.BringToFront()
Inner.Show()
End Sub

现在我可以在任何情况下使用它,例如:

AddForm(formA, formB)

但是……

在 C# 中使用相同的代码

public static void AddForm(Form Outer, Form Inner)
{
Inner.FormBorderStyle = FormBorderStyle.None;
Inner.TopLevel = false;
Inner.Dock = DockStyle.Fill;
Inner.WindowState = FormWindowState.Normal;
Outer.Controls.Add(Inner);
Inner.BringToFront();
Inner.Show();
}

我不能这样调用它:

AddForm(formA, formB);

报错

formB is type but is used like a variable.

相反,我必须这样调用它:

AddForm(A, new B());

除此之外,在 VB.NET 中的任何类(如 formA)中,如果我键入 formA,我可以看到那里存在的所有对象和控件,但在 C# 中看不到。同样,我必须创建一个新实例才能查看所有控件。如果我想相互操纵两个正在运行和工作的实例,这就会成为一个问题。那么我在这里缺少什么基本的东西?

(我是一名从 VB.NET 迁移到 C# 的业余程序员。事情进展顺利,期待我最近发现的那些。)

最佳答案

FormA 和 FormB 是 VB 中的类,可以像在 C# 中一样实例化。

但是,Microsoft 在 VS2005 中向 VB.Net 添加了对自动默认表单实例的支持,以支持从 VB classic 迁移的开发人员,这些开发人员对创建和管理表单实例的需求感到困惑。

但是,这不被认为是最佳编程实践,因为它会导致各种问题,例如无法从后台线程访问表单以及无法创建表单的多个实例。

一旦理解了 OOP 和类实例化,就绝对没有理由使用默认实例。

事实上,您可以通过在声明为 Friend 的表单中创建一个 Sub New 来禁用默认表单实例(这样它就可以在别处创建在项目中):

Friend Sub New()

' This call is required by the designer.
InitializeComponent()

' Add any initialization after the InitializeComponent() call.

End Sub

或通过修改 Public Sub New 以包含参数:

Public Sub New(SomeValue As String)

' This call is required by the designer.
InitializeComponent()

' Add any initialization after the InitializeComponent() call.

End Sub

无论哪种情况,只要引用默认实例,任何对表单默认实例的引用都将导致以下两个编译时错误:

'Form1' is a type in 'WindowsApplication1' and cannot be used as an expression.

Reference to a non-shared member requires an object reference.

说完所有关于您当前的应用程序如何在 VB.Net 中运行的内容,对于您关于 C# 的问题的具体答案是您始终需要在 C# 中创建表单的新实例。

例如:

AddForm(new formA(), new formB());

关于c# - 在 C# 和 VB.NET 中传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8863806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com