void Test(Object obj)
{
   Type t =  obj.GetType();
   //可以将obj转为他最上级的类型吗?
   //假如obj  是 Page类型的
   //就将 t转为 Page类型
   //注意我不将Page写出来,也就是不要用 obj as Page 这种方式,不知道能不能实现
}

解决方案 »

  1.   

    楼主这倒霉孩子,你一句“用来玩的”,害得我去查msdn,试试 t.BaseType 
      

  2.   

    说不定,我以后有用呢。。BaseType是基类型,我这里直接返回Object,因为他没有继承其他。
    呵呵。
      

  3.   

    基本基本的概念了。
    类型是什么,对象是什么?
    obj指向的对象已经固定了,要么你把obj这个引用指向另一个地方,要么,你就只能创建一个其他类型的引用,你无论如何修改,修改的只是这个obj指向对象的引用的类型,没有意义也没有必要。因为你类型不知道。动态创建的类型,方法和属性也必须动态调用。
      

  4.   

    obj.GetType()这个返回的是运行时类型,而非编译时类型,而且这个不是虚函数,不能重写,为的是防止类型欺骗
      

  5.   

    if   (t   is   someType) 


      

  6.   

    Type 反射 在这里 也没用吧,除非这个类型有一个方法作为转换的。
      

  7.   

    依题意:
    t本来就是Page类型,不存在转的问题.
    4.0之后,直接用dynamic
    那么所有Page类的方法,属性都可以直接调用,也就是完全按Page类来使用.
      

  8.   

    什么话?动态转什么?动态构造什么?obj本来就是Page类型的。所以#9楼说得很对,obj已经是实在的对象引用了。至于说你的代码要求原本要定义Page类型的变量,来引用obj的对象,你觉得这不是文字游戏嘛!“我不知道类型,但是我要写一个静态声明了类型的变量的语句”这不是自相矛盾嘛!
      

  9.   

    第一,我不知道是Page类型,我是根据 obj.GetType() 来获取类型的,这个问题的确没意义,纯技术上的问题。
    问题简化点,我能不能根据 一个类型的字符串str(可以用GetType获取到Type) 来对 一个Object(这个对象的GetType().ToString()与str是一样的)进行转换。
      

  10.   

    我的理解,
    类型Type是静态的概念,存在于你的程序代码中,而你运行的程序中只有对象,动态运行的对象没有转换的概念,静态Type类型才有转换的概念,转换的目的是为了写代码有提示,或者说是为了防止你代码乱写。
      

  11.   

    obj本来就引用一个Page对象实例,你到底要转换什么?你能用代码来写出你到底要什么结果吗?你的t本来就已经执行了,它保存obj.GetType()。可是你用一大堆文字,却写不出到底要什么结果。比如再定义一个变量u,你定义好它,说明如何测试它的正确性。如果你能定义好它的类型,这是最起码的编程条件。
      

  12.   

    我也知道 类型 与对象 是没办法转换的,所以我 才将希望寄托于 Type,希望他 有办法 动态 地将一个 Object 类型的数据 转换为 该对象的 最上级的类型。
    比如
        Object a = new Test();
        Type t  =    a.GetType();
        这里我能不能 用 t 对 a进行转换,然后 直接 调用 Test 里的mm方法?
        我这里不用 a as Test 这样的方法,想 用 t 对a进行操作
    我想问的是技术性的能不能实现,先不管他以后能做什么。
    dynamic 这个关键字的确能做到。
      

  13.   


    代码中能写 a.mm 却不能写 a as Test? 这不是矛盾么 
      

  14.   


    代码中能写 a.mm 却不能写 a as Test? 这不是矛盾么 
    这句的意思是换一种方法来调用mm,而且我不一定知道这 就是 Test这个类。。
    我这个Test是举例。
    换句话来说,就是
    dynamic 这个关键字 这样的效果 是怎样实现的?
      

  15.   

    能写mm,就说明已经知道是test类型了,还有不能写as test的道理?
    dynamic形式上不过就是在编写代码的时候当这些类型都是弱类型,不提示错误而已。和类型转换没什么关系吧
      

  16.   

    dynamic、反射等,跟你说的“我要将obj转为他最上级的类型”没有关系。obj就是一个Page,不存在(语言上本来是就自相矛盾地)“转换为一个原本定义时就静态地定义为Page类型”的问题。可以对任意object进行反射,来调用此变量的实际引用对象的具体属性和方法,但是这跟你的问题没有关系。你的问题,就是意味非要手写出来一个Page类型的变量,否则你就不承认.net可以反射。
      

  17.   

    sp1234说得对。
       你的问题,就是意味非要手写出来一个Page类型的变量,否则你就不承认.net可以反射。
    我也知道 反射可以调用这个对象的属性与方法。
    我认输啦,是不能这样做的。
    谢谢大家都回答