本帖最后由 tiandiyuzhou 于 2011-07-03 20:13:17 编辑

解决方案 »

  1.   

    “内存中存储”?我相信每一个CLR版本、同一版本在不同机器上的实现的内存存储,是可以完全不同的。但是不管底层如何存储,高层的概念上你的示意图(而不是什么底层“存储”)是对的。变量的类型声明为IUser,而这个变量其引用的是一个User对象实例。
      

  2.   

    先谢谢你的回复
    这里说的转换是IUser iuser = new User() as IUser;是这个
      

  3.   

    它不是把User对象转换为IUser对象吗?
      

  4.   

    首先说类永远被分配到堆中照你的理论如果有一个几百个类继承链,如果new最底层类实例,岂不会创建几百个对象。。继承链中类可以自动转换为其基类或接口,并不带表会创建一个基类实例
    这是继承带来的特性。
      

  5.   

    谢谢你的回复
    首先第一个,照你的理论如果有一个几百个类继承链,如果new最底层类实例,岂不会创建几百个对象。。可以说得详细点吗?不是很明白。
    例如再有一个类public Teacher:IUser
    {
        public int insert()
        {
           //...
        }
    }
    IUser iuser = new User() as IUser;//这里不是在堆中为User分配一个实例吗?
    iuser.insert();
    IUser iteacher = new Teacher() as IUser;//然后这里,不是在堆中为Teacher分配一个实例吗?
    iteacher.insert();
      

  6.   

    关于上面的例子的继承关系以及内存分配是这样的吗?如下图:由于User和Teacher继承于IUser,
    所以new User() as IUser
    以及
    new Teacher() as Iuser
    进行隐式转换为Iuser时可以转换成为他们继承接口?是这样理解的吗?
      

  7.   

    由于User和Teacher继承于IUser,
    所以new User() as IUser
    以及
    new Teacher() as Iuser
    进行隐式转换为Iuser时可以转换成为他们继承接口,补充上面:而不会为他们继承的接口分配内存空间?是这样理解的吗?望各位大侠帮忙解答一下!
      

  8.   

    “转换成他们的继承成接口”?晕。变量 iuser 和变量 iteacher 你可以看作分别只是几个字节的指针而已,“转换”什么对象呢?它只是对象引用嘛!