首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何重写现有的扩展方法

如何重写现有的扩展方法
EN

Stack Overflow用户
提问于 2009-09-20 14:12:00
回答 2查看 36.4K关注 0票数 66

我想用我自己的方法替换.NET或ASP框架中包含的扩展方法。

示例

代码语言:javascript
复制
public static string TextBox(this HtmlHelper htmlHelper, string name)
{
   ...
}

有可能吗?我不能使用override或new关键字。

EN

回答 2

Stack Overflow用户

发布于 2014-04-25 19:47:18

基于Eric premise (以及视图代码呈现到ASP.NET中的事实),您应该能够像这样覆盖它(至少在我的ASP.NET MVC4.0Razor中它可以工作

代码语言:javascript
复制
using System.Web.Mvc;

namespace ASP {
  public static class InputExtensionsOverride {
    public static MvcHtmlString TextBox(this HtmlHelper htmlHelper, string name) {
      TagBuilder tagBuilder = new TagBuilder("input");
      tagBuilder.Attributes.Add("type", "text");
      tagBuilder.Attributes.Add("name", name);
      tagBuilder.Attributes.Add("crazy-override", "true");
      return new MvcHtmlString(tagBuilder.ToString(TagRenderMode.Normal));
    }
  }
}

注意命名空间必须是"ASP“。

票数 5
EN

Stack Overflow用户

发布于 2009-09-20 14:17:59

扩展方法基本上只是静态方法,所以我不知道如何覆盖它们,但如果您只是将它们放在不同的名称空间中,那么您可以调用您的名称空间,而不是您想要替换的名称空间。

但是Matt Manela谈到了实例方法如何优先于扩展方法:http://social.msdn.microsoft.com/forums/en-US/csharplanguage/thread/e42f1511-39e7-4fed-9e56-0cc19c00d33d

有关扩展方法的更多想法,可以查看http://gen5.info/q/2008/07/03/extension-methods-nulls-namespaces-and-precedence-in-c/

编辑:我忘记了歧义问题,所以你最好的办法就是尽量不要包含你想要替换的扩展方法。因此,您可能不需要使用'using‘指令,而是只需输入某些类的整个包名,这样就可以解决问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1451099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档