c# - 扩展方法是如何工作的?

标签 c# asp.net extension-methods

我工作的承包商正在使用扩展方法我们拥有的知名内部类上实现CRUD。我说最好使用普通的 inheritance 而不是 extension methods,原因如下。

  • 使用扩展方法混淆、隐藏和混淆 CRUD 方法的来源。
  • 我假设扩展方法大量使用反射(速度较慢)。

他的逻辑是,“它是编译的,所以速度很快。”也许我错了……但仅仅因为它是编译的并不意味着它不使用反射,也不意味着它比普通继承更快。

所以我的问题是:

  1. 扩展方法是如何工作的?
  2. 对您拥有的众所周知的类使用继承扩展方法哪个更好?

最佳答案

How do extension methods work under-the-hood?

它们只是静态方法;编译器重写像 myObject.MyExtensionMethod() 这样的调用至 MyExtensionClass.MyExtensionMethod(myObject) .

Is it better to use inheretance or extension methods on WELL-KNOWN classes that you OWN?

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

  • 您不拥有扩展类型的代码
  • 该方法针对一个接口(interface),并且对于该接口(interface)的所有实现都是相同的(例如 IEnumerable<T> 和 Linq 扩展方法)

关于c# - 扩展方法是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804290/

相关文章:

c# - 交换矩阵行的最佳方式?

c# - 生成 DbContext 后如何修改数据库?

c# - 检查路径是否在网络上

c# - AcquireTokenByAuthorizationCode 使用 Azure Active Directory 在使用 ASP.NET MVC 的单租户应用程序中引发新异常

c# - 如何在 Javascript 中访问 Sitecore 字段?

swift - 原始类型的快速扩展性能

c# - 奇怪的 lambda 行为

javascript - 是否可以在 CKEditor 中运行 html/css 或 JavaScript?

c# - 如何编写扩展函数以返回自定义类型的平均值?

.net - 为什么 List(Of T) 没有 Count()?