不同对象的C#数组

不同对象的C#数组,c#,arrays,object,C#,Arrays,Object,我有两个类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; 如果除object之外没有其他公共基类,则只需: object[] array = new object[4]; array[0

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

如果除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();
或:

最后,为了解决这个问题:

我是c#的新手。我不喜欢,但我必须学会。在PHP中,它比PHP简单10000倍


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

如果除了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();
或:

最后,为了解决这个问题:

我是c#的新手。我不喜欢,但我必须学会。在PHP中,它比PHP简单10000倍

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

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

  • 或更多OOP方法:

    公共B类:IHolder{ }

    D类公众:IHolder{ }

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

  • 或更多OOP方法:

    公共B类:IHolder{ }

    D类公众:IHolder{ }

  • IHolder[]
    IHolder的数组

    我是c#的新手。我不喜欢,但我必须学会。在PHP中,它比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
    }
    
    我是c#的新手。我不喜欢,但我必须学会。在PHP中,它比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
    }
    

    在PHP中是这样的:$array=array($o1,$o2,$o3,$o4);简单得多。然后我可以这样做:$array=“这是一个字符串”。变量数组改变了它的类型。易于理解的优雅的很容易在网上找到:)@paulmordan:而且很容易犯错误。不要低估静态输入的威力。还有一种更简单的方法可以在C#中一次性声明和填充数组-我将在中编辑它。也许你是对的。但在我通过这次考试后,我会回到我的正常生活。PHP开发人员:P@PaulMoldovan当前位置如果你不利用别人给你的机会来拓展你的视野,我觉得很遗憾。从不同的角度看待发展总是很有用的。但如果这对你来说真的只是达到目的的一种手段,那就是你的决定。保尔·摩尔多瓦:我想如果你严重滥用了
    dynamic
    关键字,你可以假装C是一种动态类型语言。但是,这将带来严重的性能损失,并使调试程序变得更加困难。另外,其他C#开发者也会拿着手电筒和干草叉追上你;简单得多。然后我可以这样做:$array=“这是一个字符串”。变量数组改变了它的类型。易于理解的优雅的很容易在网上找到:)@paulmordan:而且很容易犯错误。不要低估静态输入的威力。还有一种更简单的方法可以在C#中一次性声明和填充数组-我将在中编辑它。也许你是对的。但在我通过这次考试后,我会回到我的正常生活。PHP开发人员:P@PaulMoldovan当前位置如果你不利用别人给你的机会来拓展你的视野,我觉得很遗憾。从不同的角度看待发展总是很有用的。但如果这对你来说真的只是达到目的的一种手段,那就是你的决定。保尔·摩尔多瓦:我想如果你严重滥用了
    dynamic
    关键字,你可以假装C是一种动态类型语言。但是,这将带来严重的性能损失,并使调试程序变得更加困难。还有,其他的C#开发者会拿着手电筒和干草叉来追你。我很好奇——你需要这个干什么?我需要学习准备考试。在谷歌上找不到答案。:)答案是:如果B和D继承自A(类或接口),则创建A的数组才有意义。虽然B和D继承自对象,但对象只有很少的属性在这里有用。
    我对c不熟悉。我不喜欢,但我必须学会。在PHP中,它比PHP简单10000倍我是PHP新手。我不喜欢它。C#是10000倍容易;)@诺洛纳:每个人都有自己的观点。我很好奇-你需要这个干什么?我需要学习准备考试。在谷歌上找不到答案。:)答案是:如果B和D继承自A(类或接口),则创建A的数组才有意义。虽然B和D继承自对象,但对象只有很少的属性在这里有用。
    我对c不熟悉。我不喜欢,但我