当前位置:编程学习 > C#/ASP.NET >>

怎么拦载类的默认构造参数?

如:

var obj=new Person();

想在new的时候找两个占位点……new之前和new之后的


--------------------编程问答-------------------- 它的基类的构造函数在它的构造函数之前执行。它的派生类的构造函数在它之后执行。 --------------------编程问答-------------------- 为何会有这样的想法,要做什么? --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
它的基类的构造函数在它的构造函数之前执行。它的派生类的构造函数在它之后执行。


不是这个意思,是要对new后的实例进行操作,new前进行一些准备 --------------------编程问答-------------------- 语法角度无解。 --------------------编程问答-------------------- 路过此地...半夜回帖不容易 --------------------编程问答-------------------- 就算是可以这样,你的同事们真的会成为很悲剧的一帮人,因为程序几乎无法调试了,vs调试器上所有的关于调试位置信息的报告全都文不对题了。

那些自认为会开发AOP的人,在vs上会造成很悲催的结果。 --------------------编程问答-------------------- 如果你想正常去地编写什么事件流程,那么请在你的代码中正常地去声明 event,然后正常地开发和调试。

AOP开发不过是一种美好的幻想,就好像幻想着所有的鸡都会下鸭蛋和鹅蛋一样。 --------------------编程问答-------------------- 如果可以修改 Person 的源码,就不存在这个问题了吧,
所以这样的要求可以通过类继承解决,首先定义一个新的类,如下:
class NewPerson : Person
{
    private int val = Init();
    private static int Init(){
        /// new 之前的处理
        return 0;
    }
    int xx;
    public NewPerson(){
        /// new 之后的处理
    }
}
然后把原来的代码修改如下:
var obj = new NewPerson(); --------------------编程问答--------------------
引用 8 楼 tcmakebest 的回复:
如果可以修改 Person 的源码,就不存在这个问题了吧,
所以这样的要求可以通过类继承解决,首先定义一个新的类,如下:
class NewPerson : Person
{
    private int val = Init();
    private static int Init(){
        /// new 之前的处理
        return 0;
    }
    int xx;
    public NewPerson(){
        /// new 之后的处理
    }
}
然后把原来的代码修改如下:
var obj = new NewPerson();


我觉得这种方法不够好…… --------------------编程问答--------------------
引用 7 楼 sp1234 的回复:
如果你想正常去地编写什么事件流程,那么请在你的代码中正常地去声明 event,然后正常地开发和调试。

AOP开发不过是一种美好的幻想,就好像幻想着所有的鸡都会下鸭蛋和鹅蛋一样。


看来是切身体会…… --------------------编程问答--------------------
stackoverflow
how to 
--------------------编程问答-------------------- 构造函数写成私有的,用静态方法返回该对象。 --------------------编程问答--------------------
引用 12 楼 NianHui 的回复:
构造函数写成私有的,用静态方法返回该对象。


也是个招,我觉得就是外部包装一下,
不过我是想,在不改动代码的情况下,搞定一切…… --------------------编程问答--------------------
引用 11 楼 emailtome 的回复:

stackoverflow
how to 


谢谢,很好的库 --------------------编程问答-------------------- vs单元测试用的Fakes程序集明显是做到了,但不知道怎么做到的 --------------------编程问答-------------------- 可以用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();
        }
    }
--------------------编程问答-------------------- AOP 和这个有关系吗?
我看了 AOP,没有看懂,好像几乎都是因为 Java 之流的单继承的缘故。
但是我觉得 既然使用 Java 就要避免多继承。

还有我一直假定 C# 的 new 是一个整体操作。
和C++不一致。就像她没有赋值重载一样。 --------------------编程问答-------------------- 想要干什么?

----new 前
var obj=new Person();
----new 后
----------------
public class  NewPerson:Person
{
  NewPerson()
  {
     --new qian
     base();
     -- new hou
  }
}

补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,