扩展方法如何在引擎盖下工作?

Pri*_*ERO 13 c# asp.net extension-methods

在我工作的承包商使用extension methods来实现CRUD,我们拥有知名的内部类.我说最好使用正常结果inheritance,extension methods原因如下.

  • 使用扩展方法会混淆,隐藏和混淆CRUD方法的来源.
  • 我假设extension methods大量使用reflection(速度较慢).

他的逻辑是,"它已编译,所以它很快." 也许我错了......但是因为它被编译并不意味着它不使用反射,也不意味着它比正常继承更快.

所以我的问题是:

  1. 如何extension methods在引擎盖下工作?
  2. 使用inheritanceextension methods使用WELL-KNOWN类是否更好?

Tho*_*que 19

扩展方法如何在引擎盖下工作?

它们只是静态方法; 编译器重写样来电myObject.MyExtensionMethod()MyExtensionClass.MyExtensionMethod(myObject).

在你所拥有的WELL-KNOWN类中使用inheretance或extension方法更好吗?

这个问题没有单一的答案,这完全取决于背景.但通常扩展方法在这些情况下最有用:

  • 您没有扩展类型的代码
  • 该方法以接口为目标,并且对于此接口的所有实现都是相同的(例如IEnumerable<T>,Linq扩展方法)


Hen*_*man 12

我假设扩展方法大量使用反射(速度较慢).

编号扩展方法在编译时解决,无需反映.
这否定了你的表现问题.

使用固有或扩展方法更好吗?

我不会说.使用存储库(DAL).一个实体应该是持久性不可知的(因此:没有来自执行CRUD的基础的继承)并且不假装涉及它不是(没有扩展).

你是对的,"使用扩展方法会混淆和混淆CRUD方法的来源",但继承不是解决方案.