我正在重构一些代码,其中一部分包括将它从VB.Net转移到C#.
旧代码声明了这样的成员:
Protected viewMode As New WebControl
新的代码,我最终得到了工作,像这样:
protected WebControl _viewMode = new WebControl(HtmlTextWriterTag.Span);
我可以假设New
关键字意味着:调用构造函数!但VB.Net如何调用一个我无法用C#调用的构造函数(一个无参数的函数)?
这在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
因为"Derived1"是一个基础,它可以访问"其他"的受保护成员,这也是一个基础.
C#采取了不同的观点.它不允许VB进行"侧向"访问.它表示可以通过"this"或与包含该方法的类相同类型的任何对象来访问受保护的成员.
因为这里的"Foo"是在"Derived1"中定义的,所以C#只允许"Foo"从"Derived1"实例访问"Base"成员."其他"可能不是"Derived1"(例如,它可能是"Derived2"),因此它不允许访问"m_x".
在这种代码的情况下,VB允许"侧向"访问"WebControl"构造函数.
但是,C#没有.