c#覆盖问题

时间:2010-11-17 13:02:06

标签: c#

我有一个具有以下属性的基类:

public virtual Dictionary<String, int> activity
    {
        get;
        set;

    }

派生类会这样覆盖:

Dictionary<string, int> myActivity = new Dictionary<string, int>()
    {
        {"result", 5},
        {"total", 6}
    };


    public override Dictionary<string, int> activity
    {
        get
        {
            return myActivity;
        }

    }

我想从基类的同一个程序集中调用override字典,但是要调用另一个类。

所以例如来自Class2我想打电话:

Class1 c = new Class1();

然后尝试访问字典:

c.activity["result"]

我收到错误,说它不在字典内?

派生类位于另一个程序集... dll文件中。

有什么想法吗?

感谢。

4 个答案:

答案 0 :(得分:2)

Class1 c = new Class2();
c.activity["result"]

将覆盖Class2中的活动属性而不是Class1

答案 1 :(得分:1)

听起来Class1 c = new Class1();与您实例化Dictionary

的类的实例相同

为了能够使用值访问Dictionary属性,您实例化的类必须是实例化Dictionary的类,或者是从中派生的类。

答案 2 :(得分:0)

如果您没有在Class1中声明的字典实例,则标记属性abstract。如果这样做,那么只需将值“result”添加到它。清楚地了解谁拥有Class1和Class2之间的数据。事实上,如果Class1不打算实际分配任何数据,那么它可能只是一个接口。

答案 3 :(得分:0)

你已经创建了一个Class1的实例,如果我正确地解释了这个问题,那么你的基类(包括类声明会很有帮助)。为了使您的对象c能够使用Class2中的字典,需要将其创建为Class2的实例。

您的代码将如下所示:

基类:

class Class1
{
    public virtual Dictionary<String, int> activity
    {
        get;
        set;
    }
}

派生类:

class Class2
{
    Dictionary<string, int> myActivity = new Dictionary<string, int>()
    {
        {"result", 5},
        {"total", 6}
    };


    public override Dictionary<string, int> activity
    {
        get
        {
            return myActivity;
        }

    }
}

然后是调用代码

Class1 c = new Class2();

此时,c。活动[“结果”]将包含预期结果。