![](/img/trans.png)
[英]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.