我知道方法體內不支持attributes
,但我想知道也許有人已經解決了這個問題。我感興趣的是一種技巧,可以讓你在方法體內輸入custom Attribute
,並且可以輸入兩個東西。方法體內的屬性
- 類Intensiation(創建對象
Foo foo = new Foo()
) - 當這個對象調用特定功能(
foo.bar()
)
後來我打算用reflection
使用進入attributes
的metadata
。我來到了一羣人,他們實際上已經擁有extented c#
這樣做,但由於無法下載,我無法驗證它。
這裏是鏈接到他們的研究論文 Freely Annotating c# 請告訴我解決
UPDATE
進一步反思,我已經知道Foo類和方法欄的名稱。 這是什麼目的是知道foo在某些方法中調用bar()。
實施例
static void Main()
{
[p1inst]
ConcretePrototype1 p1 = new ConcretePrototype1("I");
[p1call]
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine("Cloned: {0}", c1.Id);
// Wait for user
Console.Read();
}
以上是例子示出了結果。目前它不能完成,因爲編譯器給出了錯誤。但上述研究報告的作者聲稱,他們這樣做是爲了讓方法體
整點是要找出一些方法FOO
類型的對象存在的內部屬性和對象已調用bar()
或不是
什麼是你想的問題解決?看起來無論是通過向類中添加一個屬性都可以更容易地解決,或者,如果您無法修改該類,請使用該屬性創建一個包裝類。 – TheEvilPenguin 2012-08-02 05:56:08
我不知道我理解你的問題。將元數據與函數關聯不會導致在調用該函數時發生任何事情。你將如何處理這個使用反射的元數據?無論你將要在功能體內使用屬性*,你也可以使用它所屬的函數體的屬性元數據*外*。 – 2012-08-02 06:08:04
@ TheEvilPenguin我已經更新了這個問題。你說的方法可以確保調用方法bar()'? – 2012-08-02 06:08:10