我想用我自己的方法替换.NET或ASP框架中包含的扩展方法。
示例
public static string TextBox(this HtmlHelper htmlHelper, string name)
{
...
}
有可能吗?我不能使用override或new关键字。
发布于 2014-04-25 19:47:18
基于Eric premise (以及视图代码呈现到ASP.NET中的事实),您应该能够像这样覆盖它(至少在我的ASP.NET MVC4.0Razor中它可以工作
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“。
发布于 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‘指令,而是只需输入某些类的整个包名,这样就可以解决问题。
https://stackoverflow.com/questions/1451099
复制相似问题