【问题标题】:Why Is the base class also called "super" class in c#?为什么基类在c#中也称为“超”类?
【发布时间】:2017-03-10 07:27:01
【问题描述】:

如果答案是肯定的,我很好奇为什么?

在 msdn 中,“对于引用类型,始终存在从类到其任何一个直接或间接基类或接口的隐式转换。不需要特殊语法,因为派生类始终包含基类的所有成员。”

派生类不是比基类更“超级”吗,因为“派生类总是包含基类的所有成员”。还有更多,对吧?

【问题讨论】:

  • “super”是“sub”的反义词。上标,下标。这就是他们的意思。不是,“天啊,那个类太酷了!它有这么多运算符重载,我简直要死了!”
  • 一般来说,base 和 super 只是 OOP 中引用父类的其他方式。
  • 这是一个模棱两可的术语。这取决于您如何绘制继承树。您可以从底部开始,向上生长,或者在图像顶部开始向下生长。两种样式都使用。但总的来说,“super”确实指的是基类,“sub”指的是更派生的类。 C++/CLI 托管语言具有__super keyword。 “基础”和“派生”绝不含糊。

标签: c# inheritance casting type-conversion


【解决方案1】:

它可能来自数学中的“子集”/“超集”。

https://en.wikipedia.org/wiki/Subset.

基本上,假设你有这个:

public class Parent { }

public class Child : Parent { }

所有子对象都是父对象(因为子对象扩展了父对象),因此所有子对象都是父对象的子集/父对象是子对象的superset。

【讨论】:

  • 虽然“从概念上讲,派生类是基类的特化”,但 MSDN 中的“派生类扩展了基类的功能”。这意味着“在派生类中,您可以添加更多成员”。在数学上,并非 Childs 的所有元素都在 Parents 中。
  • @MikeLiu 我们不是在谈论孩子和父母的属性/组件。我们只是在讨论 Child 和 Parent 类型。不要考虑has-a 关系。想想is-a 关系。来自维基:B is a superset of A if all elements of A are also elements of B。每个孩子都是父母 - 匹配 all elements of A are also elements of B imo。不是每个 B 都是 A(A 更专业),而是每个 A 确实是 B。
  • @MikeLiu - 我认为“A 的每个元素”这个术语有些混淆。您将其理解为Child 类的每个属性/属性。我认为它是指Child 类的每个实例/对象。我认为在这种情况下,我对含义的理解更合适
  • 在数学中:“B是A的超集,如果A被“包含”在B内部,即A的所有元素也是B的元素。”但是在C#中,子类A可以从超类 B 继承时添加更多元素;即 A 并非完全“包含”在 B 内部。存在一些混乱。
  • 您将集合 A 视为一个特定的单一事物 - 它不是。 It's a Set - 代表所有 A 事物。所以 A 的元素 A 事物,而不是 A 事物的元素。
【解决方案2】:

在 C# 中,“base”指的是父类,“derived”指的是子类。

'super' 指的是在上面,没有更多。即:父母。

【讨论】:

  • 这没有回答“为什么”它被称为super。我在下面的回答尝试了这一点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2011-05-21
  • 1970-01-01
  • 2022-12-11
  • 2018-12-07
  • 2018-01-25
  • 1970-01-01
相关资源
最近更新 更多