我有一个问题不明白,结构是不能继承的,也就是说结构是不能派生类或结构,也不能派生于类或结构,但为什么结构又是隐式派生于System.ValueType类呢

解决方案 »

  1.   

    因为结构是值类型...而System.ValueType是值类型的基类...这种问题应该去看MSDN...
      

  2.   

    其中一个原因
    值得传递方式和引用传递的方式
    struct A{
      int n;
      int m;
    }
    A a1,a2;
    a1 = a2;  相当于a1.n=a2.n 和a1.m=a2.m; a1 于a2 之后没有任何关系,修改a1的字段不会影响到a2;
    class B{
      int n;
      int m;
    }
    B b1 , b2; 
    b1=b2;  b1 指向了b2的地址,只是地址传递
    假设struct允许继承
    先看看 class 
    class A{
      int m;
    }
    class B:A{
      int n;
    }
    完全可以
    B b = new B;
    A a = b;
    如果 struct ?struct A{
      int m;
    }
    struct B:A{
      int n;
    }
    B b;
    A a = b; // a.m = b.m  a.? = b.n
    b 的 n 怎么办 ,只有裁剪对象了 ,b的n 丢掉了
    class 的话  B b =new B; A a = b; B b1 = (B)a 不回丢掉任何东西,只是地址的传递,而结构就不同了
    在c++中只有对指针和引用,继承方式才有效,而对于值是会有问题的。c#也是如此
      

  3.   

    说点不专业的比如:密封类继承于一个类,密封类不能被继承结构体派生于ValueType类不代表他自己可以被派生另外他不能被继承不代表他不能继承与别人这些东西确实是规定的,规定是这样就是这样。没有规矩,不成方圆你如果要深入了解为什么要这样规定,那确实得看msdn
      

  4.   

    结构可以继承。值类型还是引用类型最终是决定程序运行时数据在栈还是在堆里。如果不了解栈和堆的区别,除了调用API,不要用struct,使用上两者区别不大。
      

  5.   

    System.ValueType 本身是 class 而不是 struct。
      

  6.   

    msdn上说:结构具有以下特点:结构是值类型,而类是引用类型。与类不同,结构的实例化可以不使用 new 运算符。结构可以声明构造函数,但它们必须带参数。一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。结构可以实现接口。结构可用作可为 null 的类型,因而可向其赋 null 值。