【发布时间】:2019-06-14 09:57:14
【问题描述】:
我对向集合中添加类有点困惑。在这种情况下是字典。
我喜欢一个“相似”的线程......但这似乎是一个完全不同的租金问题。我的问题是关于将多个类放在从公共基类继承的字典中。链接的线程是关于存储不同的类型,如 int、string、double.. 等。
class ClassName
{
public string name { get; }
public ClassName()
{
name = "name";
}
}
class Unique : ClassName
{
public string uName { get; }
public Unique()
{
uName = "UniqueName?";
}
}
class YAunique : ClassName
{
public string yaName { get; }
public YAunique()
{
yaName = "YetAnotherName";
}
}
class Program
{
static void Main(string[] args)
{
Dictionary<string, ClassName> doesThisWork = new Dictionary<string, ClassName>();
doesThisWork.Add("test", new Unique());
doesThisWork.Add("test2", new YAunique());
Console.WriteLine(doesThisWork["test"].name);
Console.WriteLine(doesThisWork["test"].uName); //dose not work
Console.WriteLine(doesThisWork["test2"].name);
Console.WriteLine(doesThisWork["test2"].yaName); //does not work
Unique example = new Unique();
Console.WriteLine(example.name);
Console.WriteLine(example.uName);
YAunique example2 = new YAunique();
Console.WriteLine(example2.name);
Console.WriteLine(example2.yaName);
// Pauses the console window
Pause4Input();
}
基本上在上面的示例中,我有 3 个类,其中 2 个是从同一个类继承而来的。如果我初始化任何一个继承类,我可以访问基类的变量和子类变量(代码底部的打印)....
....但我想做的是将这些子类放在字典中。
即使它“看起来”有点正确......我只能使用字典键访问基类中的变量。
TL;DR 我正在尝试研究如何将不同的类添加到字典集合中,并让所有子类函数和变量以及基类函数和变量都可以访问。
谢谢!
【问题讨论】:
-
能够访问所有方法是没有意义的。想象一下,如果您有一个带有对象(最基类)的字典,您可以在其中键入世界上的任何方法,这在编译时需要知道它是否正确。简而言之,您将需要存储一个基类/对象/接口并对其进行转换(或动态和猜测)。
-
派生类可以被基类的字典所接受,因为它们保证具有所有的属性、方法等。的基类。基类成员是可访问的。当您想要派生类的成员时,您必须将元素转换回基础类型。
标签: c#