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#调用的构造函数(一个无参数的函数)?
这在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#没有.
| 归档时间: |
|
| 查看次数: |
1068 次 |
| 最近记录: |