.NET中的继承是没用的?

was*_*ans 4 .net oop inheritance

我是.NET编程的新手.我知道.NET编程是100%面向对象的.我在一本关于ASP.NET 4的书中读到的一个有趣的段落指出了这一点

继承没有你想象的那么有用.在普通的应用程序中,大多数类使用包含和其他关系而不是继承,因为继承可以不必要地使生活复杂化而不会带来许多好处.着名的.NET程序员Dan Appleman曾将继承描述为"你几乎从未使用过的最酷的功能".

我在这里有点困惑,我需要.NET程序员告诉我应该采取什么以及我应该留下什么.

编辑

请大家理解我的问题,首先作者并没有直截了当地说".NET中的继承是无用的",这是我用某种方式将漏洞问题压缩为标题的方法.其次,本书来自Apress,其标题是:"在C#2010中开始ASP.NET 4"第72页.

duf*_*ymo 8

我认为在大多数介绍面向对象的学术课程中提出的继承没有用的.你总会看到Animal或Shape的层次结构,但大多数真正的问题看起来并不像那样.

这两个例子都很快就被打破了.看看Linnaeus在生物学中的物种分类或这篇关于矩形形状的文章来看看我的意思.任何继承层次结构将在一定数量的级别之后分解,因为叶类正在远离维护基类的IS-A.

任何模型都代表了要留下什么和排除什么的选择.对某些模型来说,继承肯定是有效的,对其他模型则不是那么好.

继承运行良好的示例是数据结构和接口.接口表示方法签名是继承的,省略了实现细节.因此,如果您可以抽象所有List或Set或Map实现的共同点,那么您可以获得一些提供结构的东西,但将实现细节留给设计人员.

我会说继承在这些情况下效果很好.

像大多数一揽子陈述一样,你所引用的陈述并非普遍真实.

  • +1我自己也不能说这个,所以现在我甚至不用尝试.这是一个极好的答案,尤其是最后一句:"像大多数一揽子陈述一样,你所引用的陈述并非普遍真实." (2认同)

Mar*_*ell 6

继承是一个面向对象的概念,在.NET中的变化与任何其他OO语言相比都很少,除了.NET只允许单继承(对于类); 这也很常见.

作者是正确的,继承通常很容易使用不正确,并且通常封装是一个更好的选择,但这不是以任何方式特定于.NET.

有很多次使用继承是完全合理的,你不应该回避它; 多态性等是一个很好的例子.但是大多数标准的"数据输出数据"代码不需要多态性.

它存在,有价值 - 不可能,至关重要(至少,为了保持理智;如果你喜欢用艰难的方式做事,你当然可以避免它).随意忽略它或使用它.

但做出自己的决定.就个人而言,我认为提交人感到困惑,也许有点近视.


Mic*_*tum 3

哎哟。继承不仅有用,而且还是一个核心概念,因为每个类都继承自 System.Object(不确定是否有 hacks/CLR 的东西没有这样做)。

此外,在某些技术(如 ASP.net MVC)中,您几乎肯定会使用继承(通过创建基本控制器)。

每个人都一直在使用继承,但大多数时候并没有真正意识到它。大多数中小型应用程序中没有那么多继承,而是经常使用接口,例如依赖注入。然而,几乎每个重要的应用程序都倾向于有一个基类浮动在其他类继承的地方。

我猜这就是作者的意思,定义基类或接口之间的决定。微软推荐基类,但在现实生活中接口似乎更常见。此外,由于 C# 不支持多重继承(具有多个基类的类),接口提供了更大的灵活性,但代价是无法集中公共代码或强制执行某些构造函数。

  • 好点子。我想补充一点,您不需要在基类和接口之间进行选择。您可以同时使用它们。使用接口来定义您的抽象;使用实现接口的基类来集中公共代码。我的团队使用这种方法,非常有益。 (2认同)