VB.Net与C#"As New WebControl"的区别

Tom*_*ter 2 .net c# vb.net asp.net clr

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

旧代码声明了这样的成员:

Protected viewMode As New WebControl
Run Code Online (Sandbox Code Playgroud)

新的代码,我最终得到了工作,像这样:

protected WebControl _viewMode = new WebControl(HtmlTextWriterTag.Span);
Run Code Online (Sandbox Code Playgroud)

我可以假设New关键字意味着:调用构造函数!但VB.Net如何调用一个我无法用C#调用的构造函数(一个无参数的函数)?

Sco*_*ski 9

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

WebControl的默认构造函数受到保护.

VB和C#对"受保护"的含义有不同的解释.

在VB中,您可以从派生自该类的任何类型的任何方法访问类的受保护成员.

也就是说,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
Run Code Online (Sandbox Code Playgroud)

因为"Derived1"是一个基础,它可以访问"其他"的受保护成员,这也是一个基础.

C#采取了不同的观点.它不允许VB进行"侧向"访问.它表示可以通过"this"或与包含该方法的类相同类型的任何对象来访问受保护的成员.

因为这里的"Foo"是在"Derived1"中定义的,所以C#只允许"Foo"从"Derived1"实例访问"Base"成员."其他"可能不是"Derived1"(例如,它可能是"Derived2"),因此它不允许访问"m_x".

在这种代码的情况下,VB允许"侧向"访问"WebControl"构造函数.

但是,C#没有.