[英]C# CommandBuilder alternative or way to use CommandBuilder without a connection?
[英]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.