【问题标题】:C# vs C++: inheritance specificsC# vs C++:继承细节
【发布时间】:2013-10-30 04:13:11
【问题描述】:

什么可以算作 C# 和 C++ OOP 标准定义之间的明显差异?我对任何与重载/覆盖方法的可见性相关的东西都特别感兴趣。

似乎C#在类链中实现了基于堆栈调用顺序的C++继承顺序的子集;真的吗?还是 C# OOP 与 C++ 不同? (当然,C# 具有原生反射支持,但我更感兴趣的是查找与继承或合成相关的问题。

是否存在众所周知的情况,即 C++ 中的 class N: .. class B: A { } 无法访问 C# 中可能的基类数据(在任何可能的条件下)?


我强烈反对将此问题视为“已回答”。 abstract classes can't be clearly evaluated to C++ protected constructor / virtual constructor classes(并且整个接口与 C++ 不同)没有提及“内部”。因此,如果我有机会打开它,请不要关闭赏金 - 肯定会有更多差异。

【问题讨论】:

  • 您所说的“C# 根据类链中的堆栈调用顺序实现了 C++ 继承顺序的子集”是什么意思?这句话对我来说没有意义。
  • @BassamAlugili 这个问题是关于 C# 和 C++ 继承之间的一个特殊区别。这个问题要求所有的差异,反而使它“过于宽泛”。
  • 定义“任何可能的条件”。了解基类的内存布局后,您可以直接访问它所在的内存以读取或更改对象的私有成员。

标签: c# c++ inheritance porting


【解决方案1】:

我相信你可以找到一整本关于这些东西的书。一个很大的变化是在 C# 中定义一个类时,您只能从一个基类继承。可以从多个 C++ 继承。

是否有一个众所周知的情况,其中 N 类:.. B 类:A { } 在 C++ 中无法访问基类数据(在任何可能的 条件)在 C# 中是可能的吗?

如果基类是受保护的或公共的。

protected 关键字是成员访问修饰符。受保护的成员 可在其类中和由派生类实例访问。 (来源:http://msdn.microsoft.com/en-us/library/bcd5672a.aspx

【讨论】:

  • 以下 C++ 作品: namespace XX { class Nest { protected: class Zero { protected: int xx; };类圣:零{公共:无效测试(){xx = 1; } }; }; }
  • 我指的是基类具有可通过派生类类型访问的受保护成员。我已经更新了我的答案@kagali-san
【解决方案2】:

c++ 支持多重继承,而 C# 不支持,这可能是最大的区别。

【讨论】:

    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2015-04-19
    • 2012-10-30
    • 2023-04-06
    • 2010-11-05
    相关资源
    最近更新 更多