当最初使用重载修饰符移植VB代码时,如何避免在C#中隐藏基类型成员?
然而,我在其他地方发现,对于其当最初使用重载修饰符移植VB代码时,如何避免在C#中隐藏基类型成员?,c#,vb.net,porting,C#,Vb.net,Porting,然而,我在其他地方发现,对于其重载关键字,情况并非如此,至少在继承上下文中是如此。也就是说,采用以下代码: Public Interface IParent Property SomeBool As Boolean End Interface Public Interface IChild Inherits IParent Overloads Property SomeBool As Boolean End Interface 乍一看,在移植接口IChild时
重载
关键字,情况并非如此,至少在继承上下文中是如此。也就是说,采用以下代码:
Public Interface IParent
Property SomeBool As Boolean
End Interface
Public Interface IChild
Inherits IParent
Overloads Property SomeBool As Boolean
End Interface
乍一看,在移植接口IChild
时,似乎没有一种明确的方法能够真正捕获C语言中的确切含义,而重载
没有某种等价物。如果您尝试这样做:
public interface IChild : IParent
{
bool SomeBool { get; set; }
}
那么您可能会收到如下警告:
“IChild.IsDefaultValue”隐藏继承的成员“IParent.IsDefaultValue”。如果要隐藏,请使用新关键字
new
与重载正好相反。如果没有一个等价的关键字,您如何确保它被正确移植
虽然这个问题涉及类和接口,但接口的定义阻止您通过实现来模拟它。文档:
阴影和重载。重载也可用于阴影
基类中的现有成员或重载成员集。什么时候
如果使用重载
,则使用
与基类成员具有相同的名称和参数列表,
并且您不提供阴影
关键字
资料来源:
因此,当用于阴影时,new
将是等效的。来自文档:
阴影和重载。重载也可用于阴影
基类中的现有成员或重载成员集。什么时候
如果使用重载
,则使用
与基类成员具有相同的名称和参数列表,
并且您不提供阴影
关键字
资料来源:
因此,当用于阴影时,new
将是等效的。既然子属性SomeBool
与父属性具有相同的签名,那么重载
修饰符不是真的做了与阴影
修饰符相同的事情吗?请参阅的答案。由于子属性SomeBool
与父属性具有相同的签名,因此重载
修饰符不与阴影
修饰符实际执行相同的操作吗?请参阅的答案。事实上,new
修饰符在C#中与VB.NET的重载
的对应程度甚至比它与阴影
的对应程度更高。事实上,阴影概念在C#Ref:事实上,new
修饰符在C#中与VB.NET的重载
的对应程度甚至比与阴影
的对应程度更高。事实上,阴影概念在C#Ref中不存在: