Alp*_*der 3 c# constructor metaprogramming
我有一个我希望被缓存的类型,因为它是不可变的,如果你调用new Foo(1)它,它会创建它,但也会将该实例添加到缓存中,如果你再次执行它,你最终会得到它缓存Foo值为1.
不知何故,这意味着我需要拦截调用new <Type>(),而是使用自定义逻辑.
这是可能的,如果是这样,它的表现如何?
您必须修改已编译的IL.它很难实现和不可读.任何人都new希望创建一个新实例.
更好地使用静态工厂方法:
public class Foo
{
public static Foo GetInstance(int parameter)
{
if (FooCache.IsCached(parameter))
{
// return instance from cache
}
else
{
Foo instance = new Foo(parameter);
// add to cache
return instance;
}
}
private Foo(int parameter)
{
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,构造函数是私有的.获取此类实例的唯一方法是使用工厂方法.