Class 带类的嵌套继承

Class 带类的嵌套继承,class,inheritance,Class,Inheritance,我有一个关于子类如何从另一个从基类继承的子类继承的问题。请考虑以下几点:三角形继承形状,右三角形继承三角形。我在下面有一张图片来描述这个场景 直角三角形是否可以直接从形状继承(假设它也是一个形状)? 第一部分: 直角三角形是否可以直接从形状继承 是,如果直角三角形不是从Traingle继承的 否,如果RightTriangle继承自Traingle-->C#不支持多重继承->编译错误 第二部分: 考虑到它也是一个形状 此处相同,如果RightTriangle继承自形状,则可以将其转换为形状。“视

我有一个关于子类如何从另一个从基类继承的子类继承的问题。请考虑以下几点:三角形继承形状,右三角形继承三角形。我在下面有一张图片来描述这个场景

直角三角形是否可以直接从形状继承(假设它也是一个形状)?

第一部分:
直角三角形是否可以直接从形状继承
是,
如果直角三角形不是从Traingle继承的
否,
如果RightTriangle继承自Traingle-->C#不支持多重继承->编译错误

第二部分:
考虑到它也是一个形状
此处相同,如果RightTriangle继承自形状,则可以将其转换为形状。

“视情况而定”

如果类型是不可变的,“修改”操作返回一个新实例,那么这就可以工作了

但如果存在变异操作,则不会发生

考虑:

Rectangle rect = new Square(10); // Sides of length...
rect.SetWidth(20);
这是否意味着
rect
不再是正方形,它是抛出还是设置了高度?这三个结果都是不好的(而且是违反规定的)

在不可变的情况下,
rect.SetWidth
将返回一个新实例,每个子类型都需要用逻辑编写,以便在需要时处理切换类型(例如,在上述
rect.SetWidth(10)
中,可以返回一个
正方形,因为边保持相同的长度)


当层次结构在几何上起作用时,这是因为在几何中,所有操作都会创建新形状,然后查看新形状的属性对其进行分类。在具有可变对象的静态类型语言中,这两个限制都不适用。

你说的直接继承是什么意思?我不确定我是否理解你的目标;当然,可以直接继承,但是缺少三角形层,这会让人困惑。这也会使您无法使用特定于三角形的属性或方法,这可能是直角三角形中需要的。可能的,是的,实用的/建议的,绝对不是。此外,这可能不是一个关于SO的问题,但对程序员来说更可能是一个问题。stackechange.com在这个问题中似乎没有任何东西可以证明C标记是正确的。任何适用于C的答案都将适用于具有类似继承模型的另一种语言。
RightTriangle
已经是
Shape
,因为它继承自
Shape
Triangle
。请记住,C#不允许多重继承,因此链继承是完成类似任务的唯一方法behavior@RubensFarias您还可以使用接口将共享语义与继承分离。