2017-06-04 69 views
0

比方說,我有最簡單的接口,在我的程序的所有組件。強制屬性加成用於實現接口的所有類

public interface IComponent 
{    
} 

我知道,每一個部件被寫入該項目已實現此接口,並且我知道,所有這些組件將使用的BinaryFormatter C#保存到磁盤上。這意味着每個組件都必須用[Serializable]屬性進行裝飾。現在有沒有辦法強制添加此屬性?

我說「現在」因爲我發現,告訴我,這是不可能的各種做題 - 但所有我能找到的問題是從2008年開始自那時以來已在C#規範什麼變化嗎?還是必須使用舊答案中描述的解決方法之一?

+1

最老的C#的問題,我可以找到關於Stack Overflow是從2008年7月,你是怎麼找到那些從2008年_before_回答你的問題? C#規範中的許多內容已經發生了變化,但沒有任何內容會改變編譯時使用屬性的方式(即,它們大多不是......只有少數例外,這是編譯器特有的)。您應該將您的問題關閉爲您找到的現有答案的一個副本,或者將其完全刪除。 –

+0

的「或更早版本」部分是誤導,因爲SO是在2008年開始,如果您的評論是確實的答案,我會關閉的問題:什麼事都沒有變化,有沒有辦法執行屬性裝飾。但我認爲要慎重,因爲自從C#3.0和6.0以來,很多事情都發生了變化。 – Drakestar

回答

0

您可以編寫單元測試,使用反射從庫中拾取所有實現IComponent,並檢查它們是否具有Serializable屬性。我不相信自2008年以來.NET中引入的任何新特性,可能會使檢查編譯時間變得特殊,對不起。