学c#不久,学着写一个控件,发现自己要用到自己类中定义的一个属性,就在类中new了一个自己,编译是通过了,但就是不知道实际对不对,网上也没找到类似例子,所以来问一下。这个和在其他类中new一下有什么区别?我自己在控制台中试了一下,发现这样是可以的,但是另外一种情况就有语法错误。
 public class test
    {
        public test()
        {
        }
        
        private int CC
        {
            get
            { return 5; }        }
        public static void Main()
        {
             test m = new test();
            int i = m.CC;
            Console.WriteLine(i.ToString());
        }
            这样可以
 public class test
    {
        public test()
        {
        }
        
        private int CC
        {
            get
            { return 5; }        }
        public static void Main()
        {
            a();
        }
        private void a()
        {             
            test m = new test();
            int i = m.CC;
            Console.WriteLine(i.ToString());
        }
这样编译就出错了,为什么呢?

解决方案 »

  1.   

    静态成员中不允许调用非静态成员
    所以
            public static void Main()
            {
                a();//这个错了
            } 类中当然可以new自己,单件模式就是最典型的自己new自己
      

  2.   

    public static void Main() 
            { 
                a(); 
            } 
    不能在Main方法中调用 a(),这是属于类的私有方法
      

  3.   

    Main 方法是 static 的..
    第二个方法当然会出错..
      

  4.   

    1)static方法中不能直接使用非静态成员, 因为非静态成员与实例相关,通过对象点取间接使用 2)static方法中不能用this(与实例相关) 3)非static方法中可以使用static成员 
      

  5.   

    a()是成员函数,成员函数由对象来执行,就好像[汪汪叫]是[小狗]的行为函数,[汪汪叫]需要一只小狗来执行。Main是静态入口函数,不能直接调用成员函数,而需要先创建一个小狗(对象),由小狗来汪汪叫(调用成员函数)。
      

  6.   


    new一个自己是可以的,没有坏结果,只要你不要造成无限递归就行,比如在构造函数里面new同样的构造函数由于main是静态方法,所以它不可以调用非静态的,你可以这样调用a()        public static void Main() 
            { 
    test t = new test();
                t.a(); 
            } 
      

  7.   

    那就是说可以在类中new一个自己了。呵呵 自己瞎蒙还蒙对了。还通过例子知道了一个知识点,不错不错 谢谢大家
      

  8.   

    在同一个类中 不能用new这个关键字,会出现编译错误,只有在两个类中 才可以用new 来实例化那个要应用的类!
      

  9.   

    静态成员中不允许调用非静态成员 
    另外建议楼主以后编写代码时 把代码放到try{} catch()块中捕捉异常 你就知道什么错误了...
      

  10.   

    public static void Main() 中不允许调用非静态成员,
    要实例化后才可以用.
      

  11.   

    第一段代码:其实不算在自己里面实例化自己吧?因为是在Main里面
    第二段代码:把啊a()方法定义为static就ok了
      

  12.   

    private static void a()
            {           
                test m = new test();
                int i = m.CC;
                Console.WriteLine(i.ToString());
            } 
      

  13.   

    类中可以new自己
      可是第二个方法中有错!
      

  14.   

    public class test 
        { 
            public test() 
            { 
            } 
             test m = new test();
            private int CC 
            { 
                get 
                { return 5; }         } 
            public static void Main() 
            { 
                a(); 
            } 
            private void static a() 
            {            
                
                int i = m.CC; 
                Console.WriteLine(i.ToString()); 
            } 
    这样编译通过了,但是有异常,调试通不过,这又与我上面那两个例子又有什么区别?