首页  人才招聘  项目交易  BLOG  兴趣小组  图书  资讯  文章  下载  源码  网友作品  刻盘服务 

您所在位置:论坛首页 — C#类数组的问题,急!!!
打印本页 保存页面
 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#。马上结题。

广告
 
最新招聘信息

关于本站 - 网站导航 - 联系站长 - BUG报告 - 友情链接 - 赞助本站
Copyright© 1999-2008 Programfan.com. All Rights Reserved
论坛制作&维护:Hannibal    Email: webmaster@pfan.cn
最佳浏览效果:IE6.0+ 或 FireFox 1.5+ 分辨率:1024*768