public class Ractangle {
        private double width;
        public double height;
        public double Width {
            set {
                if (0 < value) {
                    this.width = value;
                }
                else {
                    this.width = value;
                }
            }
            get {
                return this.width;
            }
        }
        public double Height {
            set {
                if (0 < value) {
                    this.height = value;
                }
                else {
                    this.height = -1;
                }
            }
            get {
                return this.Height;
            }
        }
        public Ractangle(double w, double h) {
            if (0 < w && 0 < h) {
                this.width = w;
                this.height = h;
            }
        }
    }
//这里报错:Page180Ex04.Ractangle' does not contain a constructor that takes 0 arguments
    public class ExRactangle:Ractangle {
        public ExRactangle(double w, double h,int a) {
            if (0 < w && 0 < h) {
                base.Width = w;
                base.Height = h;
            }
        }
        public  double CalcRactangeArea() {
            return this.Height * this.Width;
        }
    }
//也就是说,我不知道这个设计为什么这样子,子类 有有参的构造方法时,为什么父类要有一个无参的构造方法?

解决方案 »

  1.   

    原来楼主知道解决方法了,说下原因吧,因为在new一个实例的时候,要调用继承链上所有类的构造器,直到Object的构造器,那为什么我们有时候不在构造器调用父类的构造器呢,因为编器器帮我们自动生成了相应的代码。
    针对上面的代码,因为你的基类定义了一个带参数的构造器,所以编译器不会再为你生成默认的无参构造器,因此在编绎时,为子类构造器调用基类默认构造器会提示不存在。
    你也可以在子类构造器中显示调用基类构造器,:base(p1,p2,p3)
      

  2.   

    没有创建对象,像这样的语法,貌似和java不怎么一样,好像做了点改变,就是定义构造函数的时候,就是这样,还没在Main中写代码呢...
      

  3.   

    如果是默认调用无参的构造函数,这样才说到位...里java太久了,在这边这种语法少碰...
    请问在c#中怎么调用有参的父类哈...语法貌似不怎么一样...
      

  4.   

    class CBase {
            public int X;
            public CBase(int x) {
                if (0 < x) {
                    this.X = x;
                }
            }
        }    class CSub: CBase {
            public int Y;
            public CSub(int x, int y) {
                base(x);
                this.Y = y;
            }
        }
    你看我这样写不通过...
      

  5.   

    http://msdn.microsoft.com/zh-cn/library/k6sa6h87(v=vs.80).aspx看看“示例3”!
      

  6.   

    谢了,本来语法想在MSDN找,网上一直找不到...后来找到资源了,你的链接也蛮好的,
    : base(radius, 0)
        {
            //还有我想看到这里://Add further instructions here.
        }
    总之,谢谢3位...
      

  7.   

    和java的语法不怎么一样..谢了...