C#是怎么实现同一个类处理多种类型的数据啊?比如我要做一个Matrix矩阵类,实现矩阵的加减乘及乘方。
但我希望矩阵中的元素可以是int, double型等等。
还有我自己定义的类型,比如“分数”类型还有可能矩阵的元素不是一种类型,比如有的是int型,有的是分数型等。
当然我自己定义的分数类型重载了+-/*等运算符请高手指点,谢谢~~

解决方案 »

  1.   

    那在处理过程中,还是的转换成具体的类型啊!才能做相应的+-*/操作啊。
    我试过了,好像不行,不能对object的数据进行+-*/操作的
      

  2.   

    重载函数
    Matrix(int a,int b)
    Matrix(double a,double b)
      

  3.   

    object只能做到直接传进去...无法在里边实现
    不过倒可以在class里用一个object的变量把值传出来,自己再做强制转化
    public class xx
    {
    public object xxx;
    Matrix(int a,int b)
    Matrix(double a,double b)
    }就可以利用这一个xxx得到任何类型处理的值
      

  4.   

    反射好像可以查一个数据的类型,可不可以转换呢?比如用Object参数传入
    在处理时,用反射得到类型,并转换成相应的类型呢?
      

  5.   

    在没有泛型的日子里,恐怕只能用object了,在运算的时候判断其类型是否int、long……然后进行运算——这样做可以避免没有“+-*/”等运算符,但效率无疑是非常非常之低下的。另外一种办法就是为每种可能的类型写一个重载的方法,向楼上那样。否则,等待C#2.0吧……
      

  6.   

    你使用object做参数,在函数内将其转换为 double
      

  7.   

    参数:object, string
    用object作为对象本身的存储,用string参数存放原对象的类型名
    然后用反射转化object类型为想要的类型。
      

  8.   

    用object传入,程序没有那么聪明
    那么多类型在那,程序根本不知道选哪个
    就象一个箱子里装了某个人的东西,丢到几个人面前
    这几个人都不知道是不是自己的
    我觉得object传入是不行的,用object传出倒是一个很好的办法
    同时还可以把函数写的漂亮一点
      

  9.   

    使用 object 会很慢,使用generics好点,如果不能使用generics,可以使用code emit动态创建相应的metrix这样也很快
      

  10.   

    说错了,反射的不到原来的类型,只能得到一个原类型的Type,然后你再Switch类型转换吧……傻了一点,没办法。
      

  11.   

    还有可能矩阵的元素不是一种类型,比如有的是int型,有的是分数型等如果有的是int有的是double,即便你用他们本身的类型进行运算,系统也还是会先把int转换为double的
      

  12.   

    所以你干脆全部先转换为double或者decimal算了
      

  13.   

    我觉得你可以考虑采用设计模式之Visitor 访问者模式,具体实现可以参考《设计模式》中Visitor 部分或者《java与模式》中的单分派与多分派一章。