場景: 我有一個基類「MyBase」。 我有一個自定義屬性「MyAttrib」部隊使用歸因
有了我這樣做:
[MyAttrib(1234)]
class MyClass : MyBase()
{
MyClass()
{
}
}
問: 我可以以任何方式力類從MyBase inherting有屬性MyAttrib?
場景: 我有一個基類「MyBase」。 我有一個自定義屬性「MyAttrib」部隊使用歸因
有了我這樣做:
[MyAttrib(1234)]
class MyClass : MyBase()
{
MyClass()
{
}
}
問: 我可以以任何方式力類從MyBase inherting有屬性MyAttrib?
沒有,有沒有辦法讓編譯器需要在C#中的屬性。你確實有一些其他的選擇可供你使用。你可以編寫一個反映程序集中所有類型的單元測試並檢查屬性。但不幸的是,編譯器無法強制使用屬性。
您可以使用PostSharp這一點。 從OnMethodInvocationAspect類(PostSharp)繼承屬性類,並覆蓋CompileTimeValidate方法。
有點相似;儘管周圍的其他方式(我只希望某一個屬性可以被應用到實現特定接口的類): http://fgheysels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html
我所做的就是必須在MyBase
類的抽象屬性或方法,使繼承的類被迫覆蓋(並因此實現)這個屬性/方法。
不一樣乾淨的屬性,但不是在我看來,在運行時檢查好。
下面的答案,我認爲這將是更清潔,它是否適合的場景。 – 2015-11-20 16:35:15
如果你想確保一個基本類型或接口的所有類有一個屬性,你可以添加一個簡單的單元測試是獲取所有派生類,並聲稱他們每個人都有的屬性,加上單位的結果測試你的進一步構建過程。
見@弗雷德裏克 - gheysels – devinbost 2016-08-25 17:23:16