【发布时间】:2013-08-01 22:34:36
【问题描述】:
我有一个类Foo,里面有一个函数myName。
类 bar 继承自 Foo 并具有一个也称为 myName 的属性
我认为这应该没问题,因为:
-
property will compile 到
get_myName()(因此不会与Foo::myName(int,int)发生冲突) -
Foo::myName有参数,而显然该属性没有(同样,没有冲突)。
但我仍然收到警告:
'Bar.myName' hides inherited member 'Foo.myName(int, int)'. Use the new keyword if hiding was intended.
示例代码:
public class Foo
{
public int myName(int a, int b)
{
return 0;
}
}
class Bar: Foo
{
int a;
int b;
int myName
{
get
{
return a + b;
}
}
}
另外,如果我添加到bar 函数:
int get_myName()
{
return a+b;
}
正如预期的那样,我收到有关先前声明的函数的错误。
那么这里发生了什么?除了get_myName() 之外,该属性是否允许我使用myName 的所有重载?
【问题讨论】:
-
我能问一下为什么你的方法名和属性名一样吗?通常,如果返回类型涉及任何逻辑,则最好使用方法,否则属性
-
@Sayse 父类更通用,它需要参数来决定结果是什么。派生类更加具体,并且参数是固定的。该属性所做的只是 get{base.myName(this.a, this.b);}。所以你可以看到功能是一样的。该属性只是为了更容易编码。
标签: c# .net inheritance properties