c# - C# 中的单一继承 - 对象类?

标签 c#

我一直在问自己这个问题很长一段时间。想过贴出来。 C# 不支持多重继承(这是事实)。在 C# 中创建的所有类都派生自“对象”类(这又是一个事实)。

那么,如果 C# 不支持多重继承,那么我们如何能够扩展一个类,即使它已经扩展了 Object 类?

举例说明:

  1. A 类:对象 - A 类已创建。
  2. B 类:对象 - B 类已创建。
  3. A 类:B - 这再次得到支持。早期与对象的关联会发生什么。

经过第 3 步,我们可以在 A 中使用对象类方法。转向多级继承也是如此。如果是这样的话,那么

  1. A 类:B
  2. C 类:B
  3. A 类:C - 我必须能够访问 A 中 B 类的方法。哪一个不是这种情况?

谁能解释一下?

最佳答案

乔尔的回答是正确的。多重继承和继承树(或派生链)之间存在差异。在您的示例中,您实际上显示了一个继承树:一个对象继承(派生)自树中更高层的另一个对象。多重继承允许一个对象继承多个基类。

以下面的树为例:

public class BaseClass { }

public class SpecialBaseClass : BaseClass {}

public class SpecialtyDerivedClass : SpecialBaseClass {}

这是完全有效的,它说 SpecialtyDerivedClass 继承自 SpecialtyDerivedClass(SpecialtyDerivedClass 的父类),而 SpecialtyDerivedClass 又派生自 BaseClass(SpecialtyDerivedClass 的祖父类)。

在多重继承的思想下,这个例子是这样的:

public class BaseClass { }

public class SpecialBaseClass {}

public class SpecialtyDerivedClass : BaseClass, SpecialBaseClass {}

这在 .NET 中是不允许的,但它表示 SpecialityDerivedClass 继承自 BaseClass 和 SpecialBaseClass(它们都是父类)。

.NET 允许您从多个接口(interface)继承,从而允许一种形式的多重继承。稍微改变上面的例子:

public class BaseClass { }

public interface ISpecialBase {}

public interface ISpecialDerived {}

public class SpecialtyDerivedClass : BaseClass, ISpecialBase, ISpecialDerived {}

这表示 SpecialtyDerivedClass 继承自 BaseClass(它的父类)以及 ISpecialBase 和 ISpecialDerived(也是父类的,但更像是继父类,因为接口(interface)无法指定功能)。

关于c# - C# 中的单一继承 - 对象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/191404/

相关文章:

c# - Webdriver 管理器和 c#

c# - Windows Server 2008 上的正则表达式速度慢

c# - 如何增量迭代大小为 n 的字节数组的所有可能值?

c# - 实体中的业务逻辑并注入(inject) DbContext

c# - Restful wcf 服务返回 json 中的数据行 - android 客户端

c# - 如何确保我不会丢失来自 TCP 的数据?

c# - 发布应用程序时实体返回 null

c# - 如何将一个项目抛出的异常返回给另一个项目?

C# 委托(delegate)和事件?

c# - 生成所有可能的组合