如果可以修改 Person 的源码,就不存在这个问题了吧, 所以这样的要求可以通过类继承解决,首先定义一个新的类,如下: class NewPerson : Person { private int val = Init(); private static int Init(){ /// new 之前的处理 return 0; } int xx; public NewPerson(){ /// new 之后的处理 } } 然后把原来的代码修改如下: var obj = new NewPerson();
可以用MONO.CECIL做静态IL注入.比较麻烦. 反射不知道能不能满足你的需要. public class Class1 { public static void Main() { //获得构造函数 var ctor = typeof(Test).GetConstructors()[0]; //调用构造函数 var test = ctor.Invoke(null); } } public class Test { public Test() { Console.WriteLine("Test"); Console.ReadKey(); } }
不是这个意思,是要对new后的实例进行操作,new前进行一些准备
所以这样的要求可以通过类继承解决,首先定义一个新的类,如下:
class NewPerson : Person
{
private int val = Init();
private static int Init(){
/// new 之前的处理
return 0;
}
int xx;
public NewPerson(){
/// new 之后的处理
}
}
然后把原来的代码修改如下:
var obj = new NewPerson();
stackoverflow
how to
反射不知道能不能满足你的需要.
public class Class1
{
public static void Main()
{
//获得构造函数
var ctor = typeof(Test).GetConstructors()[0];
//调用构造函数
var test = ctor.Invoke(null);
}
} public class Test
{
public Test()
{
Console.WriteLine("Test");
Console.ReadKey();
}
}
我看了 AOP,没有看懂,好像几乎都是因为 Java 之流的单继承的缘故。
但是我觉得 既然使用 Java 就要避免多继承。还有我一直假定 C# 的 new 是一个整体操作。
和C++不一致。就像她没有赋值重载一样。
var obj=new Person();
----new 后
----------------
public class NewPerson:Person
{
NewPerson()
{
--new qian
base();
-- new hou
}
}