我想知道是否有辦法掛鉤到一個事件,每當一個對象被實例化。鉤到對象實例化
如果不存在,是否有辦法檢索屬性實例化時要附加到的對象?
我想要做的是給我的一些類的自定義屬性,每當具有此屬性的類被實例化時,爲它運行一些代碼。
當然,我可以簡單地將代碼放置在每個類的構造函數中,但這是大量的複製和粘貼,我很容易忘記將代碼複製到一個或兩個類中。當然,對於最終用戶來說非常方便,因爲他們所需要做的就是將我的屬性添加到他們的類中,而不用擔心記得在其構造函數中添加這些代碼。
我實際上不能做一個基類,因爲所有這些對象已經有一個基地。
在此先感謝。
下面是我想要做的一個例子。可以使用屬性的構造函數,也可以使用事件處理函數來實現對象實例化。
public class MySuperAttribute : Attribute
{
public MySuperAttribute()
{
//Something akin to this or the event in Global
Global.AddToList(this.TheTargetObject);
}
}
[MySuperAttribute]
public class MyLabel : System.Windows.Forms.Label
{
}
public static class Global
{
public static void AddToList(Object obj)
{
//Add the object to a list
}
//Some pseudo-hook into the instantiation of any object from the assembly
private void Assembly_ObjectInstantiated(Object obj)
{
if(obj.GetType().GetCustomAttributes(typeof(MySuperAttribute), true).Count != 0)
AddtoList(obj);
}
}
您正在尋找的術語是偵聽。如果你願意爲此付錢,PostSharp就可以做到。還有其他一些選項,我無法記住我的頭頂是免費的。他們要求每個攔截對象都是虛擬對象。 PostSharp不會。 http://doc.postsharp.net/location-interception – Brandon
http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem – Eser
@Brandon謝謝,我會研究它。 – Emilie217