为什么这个重复的成员不会导致编译器错误?
问题描述:
下面的代码:为什么这个重复的成员不会导致编译器错误?
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编译器允许它。为什么编译器不能防止这种情况?
答
为什么编译器不能阻止呢?
Here is an answer from Programmers' StackExchange.
根据MSDN,
如果派生类变量的阴影在基类的变量,它 隐藏基类版本。
而且,
但是,您可以通过使用MyBase关键字限定它访问的基类变量。
通常,发生这种情况时会发出警告。
答
当我是你的代码复制到IDE中,我得到以下警告:
变量“数据源”与基 类的GridModel“变量“数据源”冲突,应该声明为“Shadows”。
这就是你的解释,即派生类中的成员正在映射基类中的成员。
请删除asp.net MVC和Razor的标签。这些与这个问题没有直接关系 – 2015-03-02 22:07:54