当你只有基类时,有没有办法使用子类属性



这就是我想要实现的目标,有没有一种优雅的方法可以做到这一点?

public class item
{
}
public class A : item
{
public int a;
}
public class B : item
{
public string b;
}
public class example
{
A classA = new A();
B classB = new B();
item[] itemArray = {classA, classB}
foreach(item i in itemArray)
{
// get int a if item i is ofType A
// get string b if item i is ofType B 
}
}

我尝试过重写,但这迫使我在基类中创建a和b的虚拟字段。必须有更好的方法。

这可能是最好的方法,我觉得很傻,因为我没有考虑简单地将其转换为正确的类。

public class example
{
A classA = new A();
B classB = new B();
item[] itemArray = {classA, classB}
foreach(item i in itemArray)
{
if(i.GetType() == Type.GetType("A"))
{
A blabla = (A)i;
Console.WriteLine(blabla.a);
}
}
}

以下是应该如何做到的:

void Main()
{
A classA = new A() { a = 42 };
B classB = new B() { b = "Foo" };
Item[] itemArray = new Item[] { classA, classB };
foreach (Item i in itemArray)
{
if (i is A i_as_A)
{
Console.WriteLine(i_as_A.a);
}
if (i is B i_as_B)
{
Console.WriteLine(i_as_B.b);
}
}
}
public class Item { }
public class A : Item
{
public int a;
}
public class B : Item
{
public string b;
}

如果我运行,我会得到:

42
Foo

最新更新