2010-11-21 36 views
1

比方說,我們有一個情況我們有兩個班,ClassAClassB,這些都具有方法DoSomething()ClassB包含ClassA作爲字段,並且當調用ClassB.DoSomething()時,它將代理呼叫轉交給ClassA.DoSomething()。另外,ClassA.DoSomething()有一些屬性。因此,我們必須像你可以給C#成員另一個類中的另一個成員的屬性嗎?

class ClassA { 
    [SomeAttribute] 
    int DoSomething() { return 0; } 
} 

class ClassB { 
    public ClassA CA { get; } 
    int DoSomething() { return CA.DoSomething(); } 
} 

我的問題是,是否有適用於ClassA.DoSomething()ClassB.DoSomething()存在的屬性,無需重複代碼的一些方法?如果ClassA.DoSomething()有多個屬性呢?是否有一些屬性可能看起來像[ApplyAttributes(typeof(ClassA), "DoSomething")]

我沒有看到在運行時動態應用屬性,這可能都發生在編譯時。

這是一個Silverlight溶液,因此某些反射技術如TypeDescriptors不可用我。

+0

classA和classB之間是否有任何關係? – 2010-11-21 22:38:18

+0

只是從ClassB到ClassA – 2010-11-21 23:00:05

回答

2

我想創建一個自定義TypeDescriptor這將是負責分析您的ApplyAttributes屬性,並在運行時返回的相關屬性。

,我認爲它會更容易比一些討厭的創建步驟,將編譯之前修改源代碼做。

+0

+1的協會,但TypeDescriptor是一個靜態密封類。我認爲你的意思是說「實現'ICustomTypeDescriptor'」,它是一個接口,如果它存在於一個對象上,則被TypeDescriptor檢測和使用。 http://msdn.microsoft.com/en-us/library/system.componentmodel.icustomtypedescriptor.aspx – 2010-11-21 22:37:10

+0

這看起來是我所追求的,非常感謝(和你的澄清Wim)。我會讓你知道我的相處。 – 2010-11-21 23:01:15

+0

我看了一下這個方法,但我的應用程序在Silverlight中,它看起來像TypeDescriptor和ICustomTypeDescriptor在Silverlight中不可用,所以我打算將其標記爲未答覆。無論如何,無論如何,他們肯定看起來像是一件有趣的事情。 – 2010-11-22 02:42:07

0

屬性是運行時的事情。那就是知道應用於類的屬性需要一個類的實例。

現在,如果/當微軟提供了「編譯器即服務」的能力,那麼你可能能夠得到在「編譯」時此信息,並用它做什麼。實質上,除非您解析代碼文件並修改其他類的C#代碼,否則無法在編譯時執行您想要執行的操作。

如果你的類繼承關係,那麼你可以定義你的屬性是繼承。

相關問題