日期:2014-05-17  浏览次数:20899 次

.net求助类中实例化的错误
请教了,为什么下面的写法是错误的,新手学.net,希望多多指点。Animal是父类,Dog继承自它,在Dog类中这样写为什么错了?谢谢!
class Dog:Animal
    {      
       Dog  dog1 = new Dog();  
        
        public void Qd()
        {
              dog1.Jiao();
        }        
    }

------解决方案--------------------
你需要在Animal定义一个protected或者public的方法Jiao
或者在Dog类定义一个这样的方法。
------解决方案--------------------
.无限递归.
------解决方案--------------------
引用:
请教了,为什么下面的写法是错误的,新手学.net,希望多多指点。Animal是父类,Dog继承自它,在Dog类中这样写为什么错了?谢谢!
class Dog:Animal
    {      
       Dog  dog1 = new Dog();  
        
        public void Qd()
        {
              dog1.Jiao();
        }        
    }


Dog  dog1 = new Dog();
这一句会导致无限递归,然后stackoverflow
------解决方案--------------------
this.Jiao()就可以了。
------解决方案--------------------
楼主,把Animal这个类的代码也贴来看下
------解决方案--------------------
引用:
我不知道为什么Dog  dog1 = new Dog();  这句话会造成无限递归?这不就是实例化一个类吗?


实例化了一个dog,为了实例化这个dog,它又要实例化一个dog,为了实例化那个dog,还得实例化一个dog。
------解决方案--------------------
实例方法使用到当前类的对象,一般是用this来表示
------解决方案--------------------
Dog  dog1 = new Dog();  


创建一个Dog对象 以后 会先对这个对象分配内存空间,然后分配内存空间的时候又会走到这句话然后又创建一个对象新对象分配内存空间再一次创建新对象 无限递归
------解决方案--------------------
在一个类中不能有自己这个类的属性 如果有的话 也必须不能再构造函数执行前和执行时实例化他
------解决方案--------------------
实例化的时候,字段是在构造函数执行前执行的
Dog  dog1 = new Dog();这是个字段,所以无限循环的