C#不同对象的数组

时间:2013-06-28 08:35:39

标签: c# arrays object

我有2个B和D类。我必须创建一个包含4个B类型元素2和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;

3 个答案:

答案 0 :(得分:14)

如果除了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中,它容易10000倍;

我确定如果我尝试使用PHP,我会在完全相反的方向上找到相同的体验。不要以为C#更糟糕"或者"更难"而不是PHP - 它只是与众不同,你必然会发现使用一种你并不熟悉的语言比你的舒适区域更难。"语言。

答案 1 :(得分:4)

  • 或使用对象的数组object[] array

  • 或更多OOP approch:

    公共课B:IHolder { }

    公共课D:IHolder { }

IHolder[] <{1}}

的数组

答案 2 :(得分:1)

  

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

你遗漏了最后一句话的一部分:&#34;犯错误&#34;。强大型有其优势。

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