簡體   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