C#类数组的问题,急!!! |
由于刚转过C#来,对C#很多东西一窍不通,今天遇到这样一个问题:
假设A、B是两个类, Aa=new A() Ab=new A() B c=new D() B d=new D()
我现在想用一个数组来保存a、b、c、d,使调用a中的函数跟调用array[0]的函数一样,即a.f()=array[0].f()。
|
|
回复内容 |
【cool1567】: 打错了
B c=new B() B d=new B()
【ice2927276】: 沙发,
up
【cool1567】: 动态array能不能做?怎么做?谢谢~
【amandag】: 不强制类型转换应该不行,而且你的A类和B类又有什么关系呢?
【amandag】: using System;
class A { public void F() { Console.WriteLine("A"); } } class B { public void F() { Console.WriteLine("B"); } } public class Socut { public static void Main() { A a = new A(); A b = new A(); B c = new B(); B d = new B();
object[] array = new object[] { a, b, c, d };
((A)array[0]).F(); } }
【bingchener】: amandag(高歌) ,基础蛮扎实的吗,佩服
【cool1567】: object[] array = new object[] { a, b, c, d };
((A)array[0]).F(); ============================================================ A和B都是从C类继承过来的。
因为在使用中,我从array中取出一个对象,预先是不知道它的类型(例如:我从array[3]中取出为c,但我并不知道他是A还是B),如果做强制类型转换时,能不能这样做?我设置多一个数组AnotherArray[]={"A","A","B","B"},那么用((A)array[0]).F() 跟((AnotherArray[0])array[0]).F()是否等价。
因为电脑没有VS,所以没办法调试。谢谢amandag先
【cool1567】: 另外object能否支持插入新元素,应该怎么做?
【amandag】: using System;
class C { public virtual void F() { Console.WriteLine("C"); } }
class A:C { public override void F() { Console.WriteLine("A"); } } class B:C { public override void F() { Console.WriteLine("B"); } } public class Socut { public static void Main() { A a = new A(); A b = new A(); B c = new B(); B d = new B();
C[] array = new C[] { a, b, c, d };
array[0].F(); } } ==================================== 输出A
这样不用类型转换,因为多态...
【amandag】: 如果支持插入新元素,就不能用Array,而要用ArrayList了
你现在用的C#是1.1还是2.0,如果是2.0的话泛型应该能帮上些忙
【windstore】: 强,顶!
【cool1567】: C[] array = new C[] { a, b, c, d };
array[0].F();
====================================================== 是2.0的。
现在问题是:A是继承C的,A中另外定义了一个函数AnotherF(),而B中没有这个函数,那么我能不能用array[0].AnotherF();
谢谢~
【amandag】: 现在问题是:A是继承C的,A中另外定义了一个函数AnotherF(),而B中没有这个函数,那么我能不能用array[0].AnotherF(); ================================================== 肯定不行
从继承的概念来说,这肯定是行不通的
假设C类是动物类,有个eat的方法 B类是人类 当然可以重写动物类的eat方法 A类是狗类 当然也可以重写动物类的eat方法
但狗类是不会具有人类说话,写字的方法的
而且即使是 array[0].AnotherF();也必须是 ((A)array[0]).AnotherF();
【cool1567】: 呵呵,我知道那样不行~~~
我想这样解决:
C[] array = new C[] { a, b, c, d };
设置多一个数组AnotherArray以保存类名,跟array对应,然后如要提取array[0],则对AnotherArray[0]逐个判断它是A还是B,如果是A则array[0].AnotherF(),B中没有AnotherF()。
这样您觉得是否可行?如果可以就结题了。
【amandag】: 你这样做应该肯定可行
可能还有更好的办法,但我想不出来了
【cool1567】: 呵呵,谢谢了,我也是这两天做刚接触C#。马上结题。
|
|
|
|