c# - 为什么我不能同时覆盖和新建一个属性 (C#)?

标签 c# .net inheritance methods

根据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/

相关文章:

c# - 使用 asp.net 使用下一个、上一个按钮和显示总页数的分页 gridview

c# - 构建后Unity3D加载资源

聚合子类中的Java构造函数

c# - 如何创建全局变量,ASP.NET,全局asax

c# - 从用户界面调用System.Threading.Thread时,锁将挂起。

c# - 处理 StreamReader.ReadLine() 中断 - 服务器不可用

c# - 无法读取 Excel 文件 - File.open 无效

c# - TFS 构建不同项目中同一程序集的多个版本的问题

java - 如何更改实现接口(interface)的继承类的参数?

node.js - util.inherits - 如何在实例上调用 super 的方法?