如何在.net中的对象创建过程中添加钩子

时间:2010-07-15 09:17:32

标签: .net hook

我想在创建对象之前自定义对象的行为。我想可能在对象构造函数中添加一些钩子并进行更改可以有一个选择。在.net中有没有办法这样做?非常感谢提前!

修改

这是一个例子:

假设我们有一个类Kid,它使用Perform方法在课堂上获得学分。

public class Kid
{
    public void Perform() { ... }
}

学校开展讲座:

public class School
{
    public void Chemistry() {
        // The school have a good chemistry teacher, so every kid study well
        // Kid.Perform() is modified to reflect that 
        Kid tom = new Kid();
        tom.Perform();
    }

    public void Biology() {
        //This class is boring, everyone will nap in 5~10 min
        // Kid.Perform() use a random number to simulate how 
        //long this kid can hold it.
        Kid tom = new Kid(); tom.Perform();
        Kid jerry = new Kid(); jerry.Perform();
    }
}

我们希望每个孩子以同样的方式表演,我不想要:

  1. 更改类Kid,因为它是从第三方工具生成的,并在其他地方广泛使用。
  2. 使用继承。

3 个答案:

答案 0 :(得分:3)

在您的情况下,您必须在调用构造函数后添加逻辑。你可以编写一个工厂方法来做到这一点;将new SpecialObject()替换为MyExtendedSpecialObject.Create()应该不会太困难。

public static class MyExtendedSpecialObject
{
    public static SpecialObject Create()
    {
        var newObject = new SpecialObject();

        // Do something with newObject

        return newObject;
    }
}

答案 1 :(得分:0)

您只需向对象的构造函数添加逻辑。如果你指的是连接到内存分配等的过程,那么这在.NET中是不可用的。

public class MyClass
{
    public MyClass()
    {
        // Constructor logic here...
    }

    public MyClass(string name)
    {
         // Overloaded constructor logic here...
    }
}

答案 2 :(得分:0)

您可以使用System.Activator创建实例。您还可以“挂钩”激活器并执行检查。