public class Class1
{
public string File1
{
get { return _str; }
set
{
//在这里调用Class2的Method1方法
Class2.Method1(); _str = value;
}
}
private string _str;
} public class Class2
{
public static void Method1()
{
//我想在这里知道自己(Method1)被谁调用了。
//想得到的信息是:类名:Class1;属性名:File1.
}
}请教高手,可以实现吗?
{
public string File1
{
get { return _str; }
set
{
//在这里调用Class2的Method1方法
Class2.Method1(); _str = value;
}
}
private string _str;
} public class Class2
{
public static void Method1()
{
//我想在这里知道自己(Method1)被谁调用了。
//想得到的信息是:类名:Class1;属性名:File1.
}
}请教高手,可以实现吗?
如何实现?
把想告诉它的都告诉它
{
//在这里调用Class2的Method1方法
Class2.Method1(this); _str = value;
}
////////////////////////////////
public class Class2
{
public static void Method1(object o)
{
Type t = typeof(o);
}
}属性实例的类型忘记了,也想传类型那样传属性的信息..我查查看先..
{
Type t = typeof(o);
System.Reflection.PropertyInfo pro =t.GetProperty(p);
}
public static object oo;
public class Class1
{
public string File1
{
get { return _str; }
set
{
oo=this;
Class2.Method1(); _str = value;
}
}
private string _str;
} public class Class2
{
public static void Method1()
{
//根据oo做判断~~~
}
}
{
public string File1
{
get { return _str; }
set
{
Class2.oo=this;
Class2.Method1(); _str = value;
}
}
private string _str;
} public class Class2
{
public static object oo;//最好做成一个属性~~
public static void Method1()
{
//根据oo做判断~~~
}
}
可以获取当前执行的方法。
{
public string File1
{
get { return _str; }
set
{
//在这里调用Class2的Method1方法
Class2.Method1(System.Reflection.MethodInfo.GetCurrentMethod()); _str = value;
}
}
private string _str;
} public class Class2
{
public static void Method1(System.Reflection.MethodBase caller)
{
//我想在这里知道自己(Method1)被谁调用了。
//想得到的信息是:类名:Class1;属性名:File1.
Console.WriteLine("类名: {0}", caller.DeclaringType.Name);
Console.WriteLine("方法名: {1}", caller.Name);
}
}-------------------
补充:
这个办法只能获取到执行者的方法名,如果是属性比如你的例子,得到的是set_File1,而不是File1。现在还没有找到什么办法来直接获得属性名,不过暂时可以先按字符串的办法来处理。Good luck!
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern unsafe void* _GetCurrentMethod(ref StackCrawlMark stackMark);
参数StackCrawlMark是一个枚举,它有以下几个值:
[Serializable]
internal enum StackCrawlMark
{
LookForMe,
LookForMyCaller,
LookForMyCallersCaller,
LookForThread
}
可惜这些东西都是internal的,因此无法直接调用,除非用反射。