当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《VB.Net与C#"AsNewWebControl"的区别》经验,为你挑选了1个好方法。

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

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

Protected viewMode As New WebControl

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

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

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



1> Scott Wisnie..:

这在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#没有.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有