c#覆盖问题
我有一个具有以下属性的基类:c#覆盖问题,c#,C#,我有一个具有以下属性的基类: public virtual Dictionary<String, int> activity { get; set; } 然后尝试访问字典,如下所示: c.activity["result"] 我收到一个错误,说它不在字典里 派生类位于另一个程序集…dll文件中 有什么想法吗 谢谢。听起来不像class1c=newclass1()与您实例化字典的类的实例相同 要能够使用值访问字典属性,您实例化的类必
public virtual Dictionary<String, int> activity
{
get;
set;
}
然后尝试访问字典,如下所示:
c.activity["result"]
我收到一个错误,说它不在字典里
派生类位于另一个程序集…dll文件中
有什么想法吗
谢谢。听起来不像
class1c=newclass1()
与您实例化字典的类的实例相同
要能够使用值访问字典
属性,您实例化的类必须是实例化字典
的类,或者是从它派生的类。它听起来不像Class1 c=new Class1()
与您实例化字典的类的实例相同
Class1 c = new Class2();
c.activity["result"]
要能够使用值访问字典
属性,您实例化的类必须是实例化字典
的类,或者是从该字典派生的类
Class1 c = new Class2();
c.activity["result"]
在类2中重写活动属性而不是在类1中重写活动属性是否有效
如果您没有在Class1中声明字典实例,则将属性标记为抽象,那么重写Class2中而不是Class1中的activity属性将有效。如果您这样做,那么只需将值“result”添加到它。清楚地考虑谁拥有Class1和Class2之间的数据。实际上,如果Class1不打算实际分配任何数据,那么它可能需要在这里只是一个接口。如果您没有在Class1中声明字典实例,那么请标记属性摘要。如果您这样做,那么只需将值“result”添加到它。清楚地考虑谁拥有Class1和Class2之间的数据。实际上,如果Class1不打算实际分配任何数据,那么它可能需要只是一个接口。您已经创建了Class1的一个实例,如果我正确地解释了这个问题,它就是您的基类(包括类声明会很有帮助)。为了让对象c使用Class2中的字典,需要将其创建为Class2的实例
您的代码将如下所示:
基类:
class Class1
{
public virtual Dictionary<String, int> activity
{
get;
set;
}
}
此时,c.activity[“result”]将包含预期的结果。您已经创建了一个Class1实例,如果我正确解释了这个问题,它是您的基类(包括类声明将非常有用)。为了让对象c使用Class2中的字典,需要将其创建为Class2的实例
您的代码将如下所示:
基类:
class Class1
{
public virtual Dictionary<String, int> activity
{
get;
set;
}
}
此时,c.activity[“result”]将包含预期的结果。Class1是基类还是派生类?Class1是父类还是子类?您的示例没有显示哪个代码与哪个类名匹配。Class1是基类还是派生类?字典在Class1
中的什么位置初始化(假设是派生类;问题不完全清楚)?@Darren:请编辑问题,以便清楚什么名称指的是什么类,什么代码去哪里?Class1是基类还是派生类?Class1是父类还是子类?您的示例没有显示哪个代码与哪个类名匹配。Class1是基类还是派生类?字典在Class1
中的什么位置初始化(假设是派生类;问题不完全清楚)?@Darren:请编辑问题,以便清楚什么名称指的是什么类,代码的位置。嗨,我忘了提到,被重写的属性实际上在另一个程序集中…一个dll文件。@Darren程序集不重要,重要的是该属性所属的类。如果您创建了一个基类ClassA,并且有两个继承自它的类ClassB和ClassC,ClassC将看不到在ClassB中被重写的属性。更重要的是,ClassB的两个实例将看不到该属性的相同实例。嗨,我忘了提到,被重写的属性实际上在另一个程序集中…一个dll文件。@Darren程序集不重要,重要的是该属性所属的类。如果您创建了一个基类ClassA,并且有两个继承自它的类ClassB和ClassC,ClassC将看不到在ClassB中被重写的属性。此外,ClassB的两个实例将看不到相同的属性实例。
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();