我有一個問題需要解決,它圍繞着像下面這樣的代碼的想法。找到最終在一串方法調用中工作的類的名稱
public class x {
private y yInstance;
public bool doSomething(){
return y.doSomething();
}
}
public class y {
private z zInstance;
public bool doSomething(){
return z.doSomething();
}
}
public class z {
public bool doSomething(){
return true;
}
}
我想,有x的一個實例,比布爾找出實際上做的工作,在這種情況下,「Z」類。但是,在我的情況下,可以有任何數量的圖層,並且不止一條路徑可以導致最終的課程。請讓我知道是否需要澄清任何事情。
注:我需要這樣做,而不實際調用方法
這可能嗎?
編輯:這是非常可憐的僞代碼,以證明我的用例更好一點,因爲建議。請注意,在我的存儲庫中,我使用Nhibernate標準。
public IEnumberable<T> GetByCriteria(DetachedCriteria criterion){
if(criterion.Type.getFilterBase() == a)
criterion.AppendFilter_a();
if(criterion.Type.getFilterBase() == b)
criterion.AppendFilter_b();
if(criterion.Type.getFilterBase() == c)
criterion.AppendFilter_c();
return criterion.execute();
}
這是主意。請注意,在我的情況下,只有4個可能的基地。
你可以檢查IL字節碼,如果你真的要......但是可能有一個爲您的實際問題的一個更好的辦法。爲什麼更高層需要知道低級別的類名?這是一個實現細節,它可能不應該關注它(從不知道它可能會改變,或者可能有多個'最終類'),以及如何確定哪個類正在做'實際工作')。 –
這絕對不是一種選擇。原因是,根據基礎對象,我們需要在基礎知識庫中爲該對象的所有數據庫調用附加一個特定的過濾器。 –
下層無法照顧那個過濾?也許你應該用實際反映你的用例的東西更新你的示例代碼,給我們更多的上下文。 –