我有一个具有以下属性的基类:
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文件中。
有什么想法吗?
感谢。
答案 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。活动[“结果”]将包含预期结果。