C# 正在使用c获取调用函数的对象#
是否有可能获得对调用静态方法的对象的正确引用 我在Unity项目中的许多地方调用了一个静态方法,我想将一个C# 正在使用c获取调用函数的对象#,c#,unity3d,system.reflection,C#,Unity3d,System.reflection,是否有可能获得对调用静态方法的对象的正确引用 我在Unity项目中的许多地方调用了一个静态方法,我想将一个gameObject传递给UnityEngine.Debug.Log(对象消息,对象上下文)中的上下文,以便使用Unity控制台进行调试。我已经尝试了System.Diagnostics.StackTrace类,但只找到了不有用的字符串 编辑: 下面是一个类似于我需要实现的代码: public static class DebuggingHelper { public static
gameObject
传递给UnityEngine.Debug.Log(对象消息,对象上下文)
中的上下文,以便使用Unity控制台进行调试。我已经尝试了System.Diagnostics.StackTrace
类,但只找到了不有用的字符串
编辑:
下面是一个类似于我需要实现的代码:
public static class DebuggingHelper {
public static void LogText() {
var callingObject = SomeStaticReflectionClasss.INeedToGetItSomehowHere();
if(callingObject is UnityEngine.Object)
UnityEngine.Debug.Log("Good morning", callingObject as UnityEngine.Object)
}
}
您可以在组件上使用扩展方法:
public static class ComponentX
{
public static void Log(this Component component, string msg)
{
Debug.Log(msg + " called from: " + component);
}
}
从组件脚本调用它:
public class Game : MonoBehaviour
{
void Start()
{
this.Log("Hello");
}
}
结果:
从以下位置调用Hello:Game(Game)
可能出现类似于Assembly.GetCallingAssembly()的情况:代码>会有帮助,但如果没有更多细节,很难确定。如果调用方数量可控(几十个?),那么最简单的方法可能是暂时更改签名,然后处理传递游戏对象的所有编译错误,而不是试图从调用堆栈中找出它。这里有几个老问题说这是不可能的(例如):你只能得到类名,我猜这就是你得到的。不过,从那以后情况可能发生了变化。我对问题进行了编辑,以更好地说明问题。a是继承的一切,例如,monobhavior
(继承自组件)或。如果你的类不是这些类型,而是一个简单的自定义类,你就不能使用它。这个主意很酷,但在这里你知道调用方,因为你用函数参数传递它。我更愿意创建一个反射工具来获取调用者而不显式地传递它。我现在意识到这可能是不可能的…@salveiro它是隐式传递的,注意调用this.Log(“Hello”)代码>是的,但是扩展方法只是语法糖。我需要一个通用的反射解决方案,它将调用方的对象放入被调用的方法中。无论如何,这听起来像是一个严重的欺骗,所以我想我会放弃这个问题。