C# 如何检测哪个类试图生成当前类的实例

C# 如何检测哪个类试图生成当前类的实例,c#,.net,C#,.net,我不知道如何实现跟随逻辑 假设我们有form1班和form2班。此外,我们还有类Panel,我们希望在Panel类中实现以下逻辑: if form1 is calling Panel { Panel.Size = Size1; } else if form2 is calling Panel { Panel.Size = Size2; } 提前感谢您的帮助…这将打印您的调用类类型,您可能需要配置帧编号,但这将为您提供基本思路: public static void PrintC

我不知道如何实现跟随逻辑

假设我们有form1班和form2班。此外,我们还有类Panel,我们希望在Panel类中实现以下逻辑:

if form1 is calling Panel
{
   Panel.Size = Size1;
}  
else if form2 is calling Panel
{
   Panel.Size = Size2;
}

提前感谢您的帮助…

这将打印您的调用类类型,您可能需要配置帧编号,但这将为您提供基本思路:

public static void PrintCallerClassType()
{
    var stackTrace = new StackTrace(new StackFrame(1));
    var frame = stackTrace.GetFrame(0);
    Console.WriteLine(frame.GetMethod().DeclaringType);
}

虽然这是有可能的,但它很粗糙,我不相信这样做是正确的。你想这样做的原因是什么?可能有更好的解决方案。为什么不设置创建面板的大小?或者将大小作为参数传递?您可以尝试使用
System.Diagnostics.StackTrace
在代码中不断“调用”时,标题显示“生成”。您是在创建Panel的新实例还是在Panel中调用方法?@Matthew Watson-我用另一种方法(使用重写)解决了此任务,这是一种更好的方法,但在解决此任务的过程中,我意识到,在某些情况下,用我上面描述的方法解决此类问题会很有用。我试图通过使用堆栈跟踪和堆栈帧来实现上述问题,但我发现它不可靠。我想也许有一种更好更可靠的方法来检测调用方类……这是不可靠的。如果JIT认为内联有帮助,它可以内联该方法。在这种情况下,此代码将失败。我建议所有读者远离这一点;如果您正在调试,这是好的,否则请不要使用这个。