如果继承多次类可以慢一点?

时间:2010-06-04 14:52:24

标签: c# .net inheritance oop class

当我尝试创建良好的对象层次结构,这将有助于编写更少的代码并避免使用不必要的字段时,我觉得自己可以自由地为良好的分组创建许多基类,这通常是抽象的。 这样做有什么不利之处呢?很多次继承类可以慢一点? 要看到许多不必要的抽象类没有足够好的命名,在智能(自动完成)遇到它时会引起混淆吗?其他可能是什么?

4 个答案:

答案 0 :(得分:10)

  

很多时候继承的类可能会慢一些?

只有一种方法可以回答性能问题:尝试两种方式,并衡量结果。那你就知道了。

  

这样做会有什么不利之处?

过于复杂的对象层次结构的缺点是:

1)它们令人困惑,因为它们代表了不属于业务领域的概念

例如,您可能希望拥有一个可以存储员工,计算机和会议室信息的存储系统。所以你有StorableObject,Employee,Room,Computer类,其中Employee,Room和Computer继承自StorableObject。您的意思是“StorableObject”来表示您的数据库实现。有人天真地阅读你的代码会问“为什么一个人是一个可存储的对象?”当然,计算机是一个可存储的对象,而房间就是存储的地方。当你混淆了机制时与业务领域中“是一种”关系的含义的共享代码,事情变得混乱。

2)你只能在C#中获得一个“继承枢轴”;它是一种单一的继承语言。当您选择将继承用于一件事时,这意味着您已选择不将继承用于其他事物。如果你制作了基类Vehicle,派生类MilitaryVehicle和CivilianVehicle,那么你刚刚选择拥有基类飞机,因为飞机既可以是民用也可以是军用。

你必须非常仔细地选择你的继承支点;你只有一次机会把它弄好。您的代码共享机制越复杂,您就越有可能将自己描绘成一个角落,在这个角落里您会遇到一堆共享的代码,但不能使用继承来表示您想要建模的概念。

很多方法可以在没有继承的情况下共享代码。尝试为真正需要的东西保存继承机制。

答案 1 :(得分:4)

考虑组合而不是继承,但我认为你不会遇到性能问题。

答案 2 :(得分:2)

除非您正在进行反射,或类似的事情,您的代码必须在运行时遍历继承树,否则您不应该看到任何速度差异,无论一个类具有多少级别的继承,或者无论如何许多类实现了你的特定类。

最大的缺点是会使您的代码变得不必要地变脆。

如果B级正在实施/继承A只是因为B需要类似的领域,那么当你决定他们需要从A到B的行为不同时,你会发现自己处于一个受伤的世界。 ,我会回应k_b建议你想看看作文模式。

答案 3 :(得分:2)

我刚做了一个非常简单的实际测试(虽然不科学),我创建了名为A,B,C ... Q的空类,其中B继承自A,C从B继承,依此类推,继承自P.

当试图检索一些指标时,我创建了一些循环,其中我只创建了x个A对象,x个B对象,依此类推。

这些类为空,只包含默认构造函数。

基于此,我可以看到,如果创建A类型的对象需要1秒(缩放),则需要7-8秒来创建Q类型的对象。

所以答案必须是YES,太深的层次结构会影响性能。如果它是明显的,取决于许多事情,以及你正在创建多少个对象。