[英]Get own property name from parent class using reflection
是否可以獲取當前類在其調用的類中分配的屬性名稱?
假設我有三節課:
class Parent1
{
public Child myName;
public void Foo()
{
myName.Method();
}
}
class Parent2
{
public Child mySecondName;
public void Foo()
{
mySecondName.Method();
}
}
class Child
{
public void Method()
{
Log(__propertyName__);
}
}
我想Log
值myName
時, Method
是從所謂的Parent1
和mySecondName
如果Method
是從所謂的Parent2
。
是否可以使用反射而不是通過參數中的字符串傳遞名稱(我只想將其用於調試目的,我不想以任何方式將這些類鏈接在一起)
使用StackTrace
您至少可以獲取進行調用的方法和類:
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace();
Type calledFromType = trace.GetFrame(1).GetMethod().ReflectedType;
這應該給你Parent1
類型。
我認為沒有辦法獲取調用該方法的變量的名稱。
您當然可以枚舉calledFromType
所有字段和屬性,並查看其中一個是否屬於Child
類型,但是您無法保證在調用時實際使用了字段或屬性。
由於各種原因,使用反射沒有現實的方法來做到這一點:
您的實例狀態中沒有任何內容與特定的“所有者”相關。
您可以從有權訪問該屬性的任何地方調用您的代碼,因此堆棧跟蹤將無法可靠地返回任何有用的內容。
對類實例的引用可以存儲在任意數量的位置,包括方法調用的變量和參數。
所以基本上沒有。 你能做的最好的事情是告訴它它在哪里,即使這樣,你也會違反參考文獻。
class Child
{
public void Method()
{
StackFrame sf = new StackFrame(1);
var type = sf.GetMethod().ReflectedType;
var field = type.GetFields().FirstOrDefault(i => i.FieldType == typeof(Child));
Log(field.Name);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.