我正在重构一些代码,其中一部分包括将它从 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/