如何在.net的对象创建过程中添加钩子
我想在创建对象之前自定义对象的行为。我想也许可以在对象构造函数中添加一些钩子,然后进行更改,这是一种选择。在.net中有什么方法可以做到这一点吗?提前多谢 编辑: 以下是一个例子: 假设我们有一个班上的孩子,他使用Perform方法在班上获得学分如何在.net的对象创建过程中添加钩子,.net,hook,.net,Hook,我想在创建对象之前自定义对象的行为。我想也许可以在对象构造函数中添加一些钩子,然后进行更改,这是一种选择。在.net中有什么方法可以做到这一点吗?提前多谢 编辑: 以下是一个例子: 假设我们有一个班上的孩子,他使用Perform方法在班上获得学分 public class Kid { public void Perform() { ... } } 以及学校举办的讲座: public class School { public void Chemistry() {
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();
}
}
我们希望每个孩子的表现都一样,我不希望:
您只需将逻辑添加到对象的构造函数中。如果您指的是连接到内存分配等的过程,那么在.NET中是不可用的
public class MyClass
{
public MyClass()
{
// Constructor logic here...
}
public MyClass(string name)
{
// Overloaded constructor logic here...
}
}
在您的情况下,您必须在调用构造函数后添加逻辑。您可以编写一个工厂方法来实现这一点;用MyExtendedSpecialObject.Create()替换新的SpecialObject()应该不会太难
public static class MyExtendedSpecialObject
{
public static SpecialObject Create()
{
var newObject = new SpecialObject();
// Do something with newObject
return newObject;
}
}
您可以使用System.Activator创建实例。您还可以“钩住”激活器并执行检查。该对象由第三方工具生成。包装类可以解决我的问题,但意味着很多重构工作,我不太满意。还有别的吗?谢谢嗯,同样,您可以使用扩展方法来提供
Initialize
方法,但这在功能上类似于包装它。您能否举例说明自定义对象行为的含义?如果您的意思是多次实例化同一个类,但有一些特定的行为差异,那么也许可以选择将委托作为构造函数参数传递进来?我正在修改遗留代码,我想指定如何创建对象。之后,所有对象创建都将遵循该规则。您所说的“如何创建对象”是什么意思?您不能更改类构造函数中的代码吗?是的,很多人使用工厂方法。但我正在修改遗留代码。而且最好是“注入”方式。@Roy:简单的搜索和替换应该不会太困难。如果你想要这样的注入是不可能的(除非是通过面向方面的编程?),这是行不通的,询问者不能控制创建代码,否则他只能使用自己的工厂。