不同对象的C#数组
我有两个类B和D。我必须创建一个包含4个元素的数组,2个元素是B类型,2个元素是D类型。我该怎么做不同对象的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 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
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不熟悉。我不喜欢,但我