c# - VB.Net 和 C# "As New WebControl"之间的区别

标签 c# .net asp.net vb.net clr

我正在重构一些代码,其中一部分包括将它从 VB.Net 移至 C#。

旧代码这样声明一个成员:

Protected viewMode As New WebControl

新代码,我终于开始工作了,就像这样:

protected WebControl _viewMode = new WebControl(HtmlTextWriterTag.Span);

我可以假设 New 关键字的意思是:调用构造函数!但是 VB.Net 是如何调用我无法在 C# 中调用的构造函数(无参数构造函数)的呢?

最佳答案

这在 VB 中起作用而在 C# 中不起作用的原因与程序集无关。

WebControl 的默认构造函数是 protected 。

VB 和 C# 对“ protected ”的含义有不同的解释。

在 VB 中,您可以从类派生的任何类型中的任何方法访问类的 protected 成员。

也就是说,VB允许这段代码编译:

class Base
    protected m_x as integer
end class

class Derived1
    inherits Base
    public sub Foo(other as Base)
        other.m_x = 2
    end sub
end class

class Derived2
    inherits Base
end class

因为“Derived1”是一个基类,它可以访问“other”的 protected 成员,这也是一个基类。

C# 有不同的观点。它不允许像 VB 那样进行“横向”访问。 它表示可以通过“this”或与包含该方法的类具有相同类型的任何对象来访问 protected 成员。

因为这里的“Foo”是在“Derived1”中定义的,C# 将只允许“Foo”访问“Derived1”实例中的“Base”成员。 “other”可能不是“Derived1”(例如,它可能是“Derived2”),因此它不允许访问“m_x”。

在您的代码中,VB 允许“横向”访问“WebControl”构造函数。

然而,C# 没有。

关于c# - VB.Net 和 C# "As New WebControl"之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/509541/

相关文章:

java - .Net 中的 Struts、JSF 等 MVC 框架

c# - 将 where 约束与通用接口(interface)或类一起使用

javascript - HTML 文本框值属性是否可以免受 XSS 攻击?

c# - "Detail Children"主视图/详细 View 的 ASP.NET MVC 路由

asp.net - 如何在asp.net.vb中提交按钮?

c# - 如何避免在使用 MVVM 的 .NET 中使用大量 dbcontext?

c# - Raspi/如何通过 Web 界面切换 GPIO 引脚 Win 10 IOT C#

.net - 如何在 Visual Studio 2022 中创建物理文件夹

C# 计时器与服务中的线程

c# - 部署 winforms 应用程序