不同对象的C#数组

本文关键字:数组 对象 | 更新日期: 2023-09-27 18:20:10

我有两个类B和D。我必须创建一个包含4个元素的数组,其中2个是B类型,2个是D类型。我该怎么做?

B o1 = new B();
D o2 = new D();
B o3 = new B();
D o4 = new D();

数组应该是这样的:

array[0] = o1; array[1] = o2; array[2] = o3; array[3] = o4;

不同对象的C#数组

如果除了object之外没有其他公共基类,那么您只需要:

object[] array = new object[4];
array[0] = o1;
// etc

或者在一个镜头中:

object[] array = { o1, o2, o3, o4 };

要使用特定于B或D的成员,您需要在从数组中检索值时进行强制转换,例如

B b = (B) array[0];
b.SomeMethodDeclaredOnB();

如果B和D有通用方法,您可以在两个类都实现的接口中声明这些方法,并更改数组的类型:

IBD[] array = new IBD[4];
array[0] = o1;
...
array[0].SomeMethodDeclaredInIBD();

或者:

IBD[] array = { o1, o2, o3, o4 };
...
array[0].SomeMethodDeclaredInIBD();

最后,要解决这个问题:

我是c#的新手。我不喜欢它,但我必须学习它。在PHP中,它容易一万倍;

我确信,如果我尝试使用PHP,我会在完全相反的方向上找到同样的体验。不要认为C#比PHP"更糟糕"或"更难"——它只是不同,你一定会发现使用一种你不熟悉的语言比你的"舒适区"语言更难。

  • 或使用对象的阵列object[] array

  • 或更多OOP方法:

    公共B类:IHolder{}

    公共类D:IHolder{}

IHoldersIHolder[]阵列

我是c#的新手。我不喜欢它,但我必须学习它。在PHP中,它容易一万倍;

你漏掉了最后一句话的一部分:"犯错误"。强类型性有其优点。

您可以让类B和D从一个公共基类或接口继承,比如:

interface ISomeInterface
{
    string CommonProperty { get; }
}
class B : ISomeInterface
{
    public string CommonProperty { get; }
}
class D : ISomeInterface
{
    public string CommonProperty { get; }
}
ISomeInterface[] array = new ISomeInterface[]
{
    o1,
    o2,
    o3,
    o4
}