.net NET中的继承是无用的吗?

.net NET中的继承是无用的吗?,.net,oop,inheritance,.net,Oop,Inheritance,我对.NET编程相当陌生。我知道.NET编程是100%面向对象的。我在一本关于ASP.NET4的书中读到一段有趣的话,说 继承没有您预期的那么有用。在普通应用程序中,大多数类使用 包容和其他关系而不是继承,因为继承会使生活复杂化 不必要的,却没有带来很多好处。Dan Appleman,一位著名的.NET程序员,曾经 将继承描述为“你几乎永远不会使用的最酷的特性” 我在这里有点困惑,我需要.NET程序员告诉我应该拿什么,离开什么 编辑 请大家理解我的问题,首先作者并没有直截了当地说“在.NET中继

我对.NET编程相当陌生。我知道.NET编程是100%面向对象的。我在一本关于ASP.NET4的书中读到一段有趣的话,说

继承没有您预期的那么有用。在普通应用程序中,大多数类使用 包容和其他关系而不是继承,因为继承会使生活复杂化 不必要的,却没有带来很多好处。Dan Appleman,一位著名的.NET程序员,曾经 将继承描述为“你几乎永远不会使用的最酷的特性”

我在这里有点困惑,我需要.NET程序员告诉我应该拿什么,离开什么

编辑


请大家理解我的问题,首先作者并没有直截了当地说“在.NET中继承是无用的”,这是我用一些词来解决这个问题的方式,以适合作为标题。第二,这本书来自Apress,书名是:“2010年C#中开始ASP.NET4”第72页

考虑到你承认对主题不熟悉,而且你正在阅读的那本书已经出版,很可能你只是误解了你想要传达的信息。也许那一段的文字不是很清楚。继承非常有用,并且被广泛使用。

我认为在大多数面向对象的入门课程中介绍的继承是毫无用处的。你总是会看到动物或形状的层次结构,但大多数实际问题看起来不是这样的

这两个例子很快就被打破了。看看林奈在生物学上的物种分类,或者关于长方形的分类,看看我的意思。任何继承层次结构都会在一定数量的级别之后崩溃,因为叶类离使用基类维护IS-a越来越远

任何模型都代表了对保留内容和排除内容的选择。继承当然可以用于某些模型,但对于其他模型则不太好

数据结构和接口就是继承工作良好的例子。接口表示方法签名是继承的,而忽略了实现细节。所以,如果您可以抽象出所有列表、集合或映射实现的共同点,那么您就得到了一些可以提供结构但将实现细节留给设计师的东西

我要说的是,在这些情况下,继承非常有效


像大多数笼统的说法一样,你所引用的那句话并非普遍正确。

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

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


每个人都一直在使用继承,大多数时候都没有真正意识到这一点。在大多数中小型应用程序中没有太多的继承,相反,通常使用接口,例如依赖注入。然而,几乎每一个非平凡的应用程序都倾向于有一个基类在其他类继承的地方浮动


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

继承是一个OO概念,在.NET中与任何其他OO语言相比变化很小,保存.NET只允许单一继承(类);这也很常见

作者是对的,继承通常很容易被错误地使用,封装通常是一个更好的选择,但这并不是特定于.NET的

很多时候,使用继承是非常有意义的,你不应该回避它;多态性等就是一个很好的例子。但大多数标准的“数据输入数据输出”代码不需要多态性

它就在那里,有价值——不,是必要的(至少是为了保持理智;如果你喜欢用艰难的方式做事,你当然可以避免它)。请随意忽略它或使用它


但是你自己做决定。就我个人而言,我认为作者有点困惑,也许有点短视。

就像一个很小的例子,如果没有继承,当你在windows中创建表单或在web应用程序中创建ASP.Net网页时,你必须自己添加所有“窗口”功能(例如下面**)的所有代码,并将此代码添加到您创建的每个此类表单或网页中…
没用???几乎没有

您从System.Windows.Form“继承”的某些功能的示例“

(移动窗口、调整窗口大小、最小化、最大化、恢复窗口、在窗口下方和附近绘制屏幕、处理鼠标单击窗口生成的消息、控制窗口是否具有焦点、在窗口和其他屏幕元素之间来回传递数据等。)

已经有很多很好的答案,但是我在学习OOP时,在理解OOP方面遇到了困难,所以这可能会有所帮助

首先看一看,它展示了如何在普通asp.net应用程序中使用类和继承


有关继承的真实示例,请参阅。它是一个包含许多控件的常见内容的类,向下滚动查看继承层次结构,并查看有多少控件继承此控件。

在一般业务案例中,不,您不会创建类型的深层次结构。但是,您将l始终直接使用继承

总是

带有代码隐藏的ASP.NET.aspx页从代码隐藏类继承而来