繁体   English   中英

C#-使用属性的替代方法

[英]C# - Alternative way to use attribute

可以说我得到以下内容:

public class A {
     [MyAttribute]
     public void Test() {}
}

我不喜欢添加属性以[]作为方法或类的前缀的行为。 我认为这会使代码的可读性降低。

我发现更好的方法可以是:

AddAttribute(A, Test, MyAttribute);

有没有办法做这样的事情?

因为那是在运行时添加属性...

还是有其他使用属性的方法? 喜欢xml文件?

无法在运行时添加属性,这些属性已嵌入到程序集的元数据中。 但是,您可以在构建过程中使用外部工具添加属性,以在编译之前修改源代码。

不,没有替代属性的通用解决方案。

但是,还有其他方法可以实现属性提供的内容。 这实际上取决于您使用的框架。

这取决于上下文。 某些情况下 ,属性实际上可以在运行时添加-但它们仅在TypeDescriptor下显示(这是大多数UI数据绑定使用的功能),而不是原始反射。

例如,用于注释类型

TypeDescriptor.AddAttributes(typeof(Foo),
    new TypeConverterAttribute(typeof(ExpandableObjectConverter)));

在运行时将类型转换器替换为类型。

您也可以使用properties做一些技巧,但这很多种模式……

对于一般情况; 只需使用代码属性。 关于属性,天生就没有什么不可读的,它们的位置可以证明它们是元数据 - 有关类型/方法,但并不是真正属于类型/方法本身的一部分。


以下仅用于讨论; 我不会因为您不喜欢它的外观而这样做(尽管我已经做了类似的事情来帮助注释机器生成的代码):

文件1

[Description("evil evil evil")]
partial class Foo {
    [Description("don't do this")]
    partial void Bar();
}

文件2

partial class Foo {
    partial void Bar() {
        Console.WriteLine("I can only be called from inside the type; "
           + "I can't be public");
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM