根据this question似乎您可以为方法执行此操作。我想知道的是为什么当我尝试使用属性时它不起作用。
public class Foo
{
public virtual object Value
{
get;
set;
}
}
public class Foo<T> : Foo
{
public override object Value
{
get
{
return base.Value;
}
set
{
base.Value = (T)value; //inject type-checking on sets
}
}
public new T Value
{
get { return (T)base.Value; }
set { base.Value = value; }
}
}
来自 C# 4.0 RC1 的错误消息
Error 1 The type 'ClassLibrary1.Foo' already contains a definition for 'Value' ClassLibrary1\Class1.cs 31 22 ClassLibrary1
最佳答案
您不能有两个属性使用相同的名称。这在 C# 中是不允许的。唯一的异常(exception)是索引器,因为在索引器的情况下,签名会随索引类型而变化。
您不能对仅因返回类型不同的方法进行重载。同一规则基本上禁止具有单个名称的属性,因为它在内部是一对没有用于 get 访问器的参数的方法。
关于c# - 为什么我不能同时覆盖和新建一个属性 (C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504249/