2015-03-02 87 views
0

下面的代码:为什么这个重复的成员不会导致编译器错误?

Public Class GridModel 
    Public DataSource As IDataSource 
End Class 

Public Class GridModel(Of TDataItem) 
    Inherits GridModel 

    Public DataSource As IDataSource(Of TDataItem) 
End Class 

我本来以为,这将不能编译,因为这两个成员具有相同的名称,只有返回类型不同,但VB编译器允许它。为什么编译器不能防止这种情况?

+0

请删除asp.net MVC和Razor的标签。这些与这个问题没有直接关系 – 2015-03-02 22:07:54

回答

2

为什么编译器不能阻止呢?

Here is an answer from Programmers' StackExchange.

根据MSDN

如果派生类变量的阴影在基类的变量,它 隐藏基类版本。

而且,

但是,您可以通过使用MyBase关键字限定它访问的基类变量。

通常,发生这种情况时会发出警告。

0

当我是你的代码复制到IDE中,我得到以下警告:

变量“数据源”与基 类的GridModel“变量“数据源”冲突,应该声明为“Shadows”。

这就是你的解释,即派生类中的成员正在映射基类中的成员。

相关问题