gpt4 book ai didi

c# - 在 vb.net 中隐式实例化的对象?

转载 作者:太空狗 更新时间:2023-10-29 18:14:57 26 4
gpt4 key购买 nike

我正在维护一个同时具有 VB.NET 和 c# 组件的应用程序。我认为这两种语言仅在语法上有所不同,但我在 VB.NET 中发现了一个 C# 中不存在的奇怪功能。

在 VB.NET 中,我有以下类:

Public Class bill_staff Inherits System.Windows.Forms.Form
....
End Class

如果我想在 C# 中使用这个类,我会这样做:

using (var frm = new bill_staff())
frm.ShowDialog();

但是,在 VB.NET 代码中,类可以这样使用:

bill_staff.ShowDialog();

ShowDialog 在元数据中定义如下:

Public Function ShowDialog() As System.Windows.Forms.DialogResult

所以在VB.NET中,调用类的实例方法是可能的。据我所知,这似乎隐式地创建了该类的一个新实例,然后调用该对象的方法。在 C# 中,这是不可能的 - 必须在类上调用静态方法,并且必须在对象上调用实例方法。

我在 Internet 上找不到有关此的任何信息。这个功能叫什么,它是好的做法吗?

该项目最初是从 VB6 转换而来的 - 它是否有一些奇怪的遗留功能?

最佳答案

是的,这是遗留行为。类直到 v4 才出现在 VB 中,在此之前 Form1.Show 是显示表单的方式。为了保持以前的代码兼容(VB3也很流行),保留了旧方法。

.NET 仍然支持它作为显示表单的合法方式。最初,添加它是为了便于将 VB6 代码迁移到 VB.NET。但也可以使在 VB 中运行某些东西变得容易 - MS 将其称为触手可及的功能和类似的短语。

基本上,它为修补匠提供了一种无需理解对象和 OOP 即可轻松编程的方法。想象一下,如果 Form1.Show 抛出错误,我们会在这里遇到什么问题。

显式实例化是更好的方法,因为它是面向对象的,并且当您实际想要使用现有实例时,您的代码不太可能引用或创建新的 Form2

关于c# - 在 vb.net 中隐式实例化的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20076969/

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