【发布时间】:2011-08-26 01:24:40
【问题描述】:
有没有人尝试过在 .NET 4.0 下使用 System.CodeDom 生成扩展方法?似乎没有任何方法可以将 CodeMemberMethod 或 CodeParameterDeclarationExpression 指定为扩展方法/参数。
如果这不可能,有什么好的解决方法吗?
谢谢
【问题讨论】:
标签: c# extension-methods codedom system-codedom-compiler
有没有人尝试过在 .NET 4.0 下使用 System.CodeDom 生成扩展方法?似乎没有任何方法可以将 CodeMemberMethod 或 CodeParameterDeclarationExpression 指定为扩展方法/参数。
如果这不可能,有什么好的解决方法吗?
谢谢
【问题讨论】:
标签: c# extension-methods codedom system-codedom-compiler
引用:
在 Visual Basic 中,您应该使用此属性来创建扩展方法。有关详细信息,请参阅扩展方法 (Visual Basic)。
在 C# 中,您不需要使用此属性;您应该对第一个参数使用 this(C# 参考)修饰符来创建扩展方法。编译器会自动为扩展方法发出 ExtensionAttribute。有关详细信息,请参阅扩展方法(C# 编程指南)。
如果您正在编写支持扩展方法的编译器,您的编译器应该在每个扩展方法以及包含一个或多个扩展方法的每个类和程序集上发出此属性。
【讨论】:
this 修饰符
显然 CodeDom 无法为扩展方法的第一个参数生成正确的代码,但你可以这样作弊:
var param = new CodeParameterDeclarationExpression("this string", "s");
它会很高兴地忽略“这个字符串”不是有效类型的事实......
【讨论】: