gpt4 book ai didi

c# - 如何判断一个类是否构造完成(实例构造完成)?

转载 作者:太空狗 更新时间:2023-10-29 21:14:17 25 4
gpt4 key购买 nike

我有一个基类,它有一个由派生类执行的方法。该方法由派生类的构造函数及其中的某些方法或属性引发。我需要确定它是来自该派生类的实例构造函数内部还是之后(在运行时)。

下面的例子解释了我需要什么:

public class Base
{
public Base()
{

}

protected void OnSomeAction(object sender)
{
// if from derived constructor EXIT, else CONTINUE
}
}

public class Derived : Base
{
public void Raise()
{
base.OnSomeAction(this); // YES if not called by constructor
}

public Derived()
{
base.OnSomeAction(this); // NO
Raise(); // NO
}
}

class Program
{
static void Main(string[] args)
{
var c = new Derived(); // NO (twice)
c.Raise(); // YES
}
}

问题是我无法更改签名或参数,因为我无法更改派生类。基本上我在想的是确定派生类(发送者)是否完全构造。

所以实现是这样的。我不能在破坏派生类的基类中进行更改。我只能对基类进行更改:/

这在某种程度上是可能的,好还是不好?不幸的是,即使是一些反射魔术或类似的 hacky 方法也是受欢迎的,因为这是必须的:/。

谢谢!

最佳答案

Is this possible in some way...

good or not?

不是。但你已经知道了。

不过,这是一种方法。

protected void OnSomeEvent( object sender, EventArgs e )
{
var trace = new StackTrace();
var frames = trace.GetFrames();

for ( int idx = 0; idx < frames.Length; idx++ )
{
MethodBase method;

method = frames[idx].GetMethod();
if ( method.ReflectedType == typeof(Derived) && method.IsConstructor )
{
return;
}
}
/* Perform action */
}

source

关于c# - 如何判断一个类是否构造完成(实例构造完成)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7354384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com