为啥结构类型可以实现接口,却不能继承其他的class
为什么结构类型可以实现接口,却不能继承其他的class?
区别对待的原因是什么,C#这样做有什么设计上的考虑
------解决思路----------------------
1、实现和继承是两码事。只允许实现接口,却不可以继承,本身不矛盾。
2、struct不能继承的一个原因是struct有固定的大小。
假设结构可以继承:
struct Point {public int X; public int Y; } // 大小8个字节
struct Point3D : Point {public int X; } // 大小12个字节
那么Point[] points = new Point[5];
根据‘面向对象’的原则之一,‘派生类可以当成基类使用‘,也就是说Point3D一定是Point,我们应该允许这样的赋值:
points[0] = new Point3D();
但是,12个字节的结构明显不可以放到8个字节的抽屉里面。
------解决思路----------------------
struct作为一种值类型使用,继承类不是搞复杂了,违反 struct设计的初衷。
------解决思路----------------------
可是C#里面的托管代码并不能使用sizeof关键字来计算大小啊
代码哪里来的大小
你到底想表达什么
你所谓的托管代码,是指托管资源?引用类型???
------解决思路----------------------
因为struct是二等公民,否则应该支持struct继承struct
------解决思路----------------------
1.结构体是值类型不是引用类型,婴儿int型数据能继承自class么?
2.接口和继承不同概念,不能继承不意味着就不能实现接口(接口只是定义了规范和契约,不像基类会对子类产生影响)。
3.sizeof只能获得基础类型的大小(int,float,bool这些),不能获取类的实体的大小。
------解决思路----------------------
继承是 class 的特征
struct 不是类,自然就不能继承
------解决思路----------------------
因为他已经继承了System.ValueType
区别对待的原因是什么,C#这样做有什么设计上的考虑
------解决思路----------------------
1、实现和继承是两码事。只允许实现接口,却不可以继承,本身不矛盾。
2、struct不能继承的一个原因是struct有固定的大小。
假设结构可以继承:
struct Point {public int X; public int Y; } // 大小8个字节
struct Point3D : Point {public int X; } // 大小12个字节
那么Point[] points = new Point[5];
根据‘面向对象’的原则之一,‘派生类可以当成基类使用‘,也就是说Point3D一定是Point,我们应该允许这样的赋值:
points[0] = new Point3D();
但是,12个字节的结构明显不可以放到8个字节的抽屉里面。
------解决思路----------------------
struct作为一种值类型使用,继承类不是搞复杂了,违反 struct设计的初衷。
------解决思路----------------------
可是C#里面的托管代码并不能使用sizeof关键字来计算大小啊
代码哪里来的大小
你到底想表达什么
你所谓的托管代码,是指托管资源?引用类型???
------解决思路----------------------
因为struct是二等公民,否则应该支持struct继承struct
------解决思路----------------------
1.结构体是值类型不是引用类型,婴儿int型数据能继承自class么?
2.接口和继承不同概念,不能继承不意味着就不能实现接口(接口只是定义了规范和契约,不像基类会对子类产生影响)。
3.sizeof只能获得基础类型的大小(int,float,bool这些),不能获取类的实体的大小。
------解决思路----------------------
继承是 class 的特征
struct 不是类,自然就不能继承
------解决思路----------------------
因为他已经继承了System.ValueType