svi*_*ick 3 .net c# extension-methods codedom
我正在尝试使用CodeDOM创建扩展方法.似乎没有任何支持它们,并且ExtensionAttribute不允许使用(内部使用C#标记扩展方法).
可以使用技巧来指定this修饰符,但是如何创建包含类static,以便代码实际编译?
由于static是C#概念,因此不会通过CodeDOM API公开.并设置TypeAttributes到TypeAttributes.Abstract | TypeAttributes.Sealed | TypeAttributes.Public不行的,因为
抽象类不能被密封或静态
如何使扩展方法编译?
我很确定你在寻找:
var staticClass = new CodeTypeDeclaration("Extensions")
{
Attributes = MemberAttributes.Public|MemberAttributes.Static
};
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用.有趣的是:
provider.Supports(GeneratorSupport.StaticConstructors);
// True
provider.Supports(GeneratorSupport.PublicStaticMembers);
// True
Run Code Online (Sandbox Code Playgroud)
但是,然而,当你去输出它,即使Attributes属性显然从没有改变的变化0x00005002来0x00006003.
感谢您报告此事.不幸的是,看起来我们不能支持CodeDom的静态类.
原因是CodeDom的设计目标之一是与语言无关,因此可以轻松地为不同的语言生成为一种语言生成的任何代码.虽然静态类经常在C#中使用,但VB不支持它们.因此,添加对静态类的支持意味着一些可以为C#编译的代码将无法编译为VB,这违背了我们的目标.
虽然我们无法就此问题采取行动,但我们请您继续提供反馈,以帮助我们改进.
肮脏的解决方法:
var type = new CodeTypeDeclaration("Extensions");
type.Attributes = MemberAttributes.Public;
type.StartDirectives.Add(
new CodeRegionDirective(CodeRegionMode.Start, "\nstatic"));
type.EndDirectives.Add(
new CodeRegionDirective(CodeRegionMode.End, String.Empty));
Run Code Online (Sandbox Code Playgroud)
生产:
#region
static
public class Extensions
{
}
#endregion
Run Code Online (Sandbox Code Playgroud)
哪个编译.
| 归档时间: |
|
| 查看次数: |
2167 次 |
| 最近记录: |