C#不同对象的数组

Pau*_*van 0 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();
Run Code Online (Sandbox Code Playgroud)

数组应该是这样的:

array[0] = o1; array[1] = o2; array[2] = o3; array[3] = o4;
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 14

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

object[] array = new object[4];
array[0] = o1;
// etc
Run Code Online (Sandbox Code Playgroud)

或者一次性拍摄:

object[] array = { o1, o2, o3, o4 };
Run Code Online (Sandbox Code Playgroud)

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

B b = (B) array[0];
b.SomeMethodDeclaredOnB();
Run Code Online (Sandbox Code Playgroud)

如果B和D有共同的方法,你可以在两个类都实现的接口中声明那些,并改变数组的类型:

IBD[] array = new IBD[4];
array[0] = o1;
...
array[0].SomeMethodDeclaredInIBD();
Run Code Online (Sandbox Code Playgroud)

要么:

IBD[] array = { o1, o2, o3, o4 };
...
array[0].SomeMethodDeclaredInIBD();
Run Code Online (Sandbox Code Playgroud)

最后,要解决这个问题:

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

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

  • @PaulMoldovan:如果你没有利用你的机会拓展视野,我觉得很遗憾.从发展角度看待不同的观点总是有用的.但是,如果这只是*真的*就你所关注的那样只是一种手段,那就是你的召唤.我只是觉得你错过了. (8认同)