1

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

3 回答 3

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“更糟糕”或“更难”——它只是不同,你一定会发现使用一种你不熟悉的语言比你的“舒适区”语言更难。

于 2013-06-28T08:36:35.320 回答
4
  • object[] array或使用对象数组

  • 或更多 OOP 方法:

    公共类 B:IHolder { }

    公共类 D:IHolder { }

IHolder[]数组IHolders

于 2013-06-28T08:37:40.987 回答
1

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

你遗漏了最后一句话的一部分:“犯错误”。强类型有其优势。

您可以让类 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
}
于 2013-06-28T08:39:15.100 回答