不同对象的C#阵列(C# array of different objects)

2019-10-30 07:17发布

我有2类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;

Answer 1:

如果有一个以上的对象之外没有共同的基类,你只需要:

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中更容易10000次;

我敢肯定,如果我试图用PHP我发现在完全相反的方向相同的经历。 不要认为C#是比PHP“糟糕”或“困难” - 它只是不同的,你一定会发现很难用你不熟悉的莫过于你的“舒适区”语言的语言。



Answer 2:

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

  • 以上OOP计算策略:

    公共类B:IHolder {}

    公共类d:IHolder {}

IHolder[]阵列IHolders



Answer 3:

我是新来的C#。 我不喜欢它,但我一定要学它。 在PHP中更容易10000次;

你忽略了最后一句的一部分:“犯错误”。 强typedness都有其长处。

可以让类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
}


文章来源: C# array of different objects
标签: c# arrays object