学习C#过程中一个关于继承的问题理解!
using System;
namespace MyShape
{
 public  class Rectangle:Shape
 {
     protected int a;
     protected int b;
     public Rectangle(int va, int vb)
     {
         a = va;
         b = vb;
     }     }    public class Square : Rectangle
    {
        public Square(int va)
            : base(va, va)
        {
            ;
        }           
    }
}这两个类之间的继承问题如下:       
 public Square(int va)
            : base(va, va)
        {
            ;
        } 
这样写为什么只有一个分号?其他语句都可以略写吗?既然是构造函数 为什么没有定义域?难道这样可以继承吗?
using System;
namespace MyShape
{
 public  class Triangle:Shape
    {
     int a;
     int b;
     int c;
     public Triangle(int va, int vb, int vc)
     {
         a = va;
         b = vb;
         c = vc;
     }
    }    public class RecTriange : Triangle
    {
        new protected int a;
        new protected int b;
        public RecTriange(int va, int vb)
            : base(va, vb, (int)(Math.Sqrt(va * va + vb * vb)))
        {
            a = va;
            b = vb;
        }
    }    public class RectEqualTriangle : RecTriange
    {
        new protected int a;
        public RectEqualTriangle(int va)
            : base(va, va)
        {
            a = va;
        }
    }
}
 类RecTriange 继承 Triangle类 
在类中
        public RecTriange(int va, int vb)
        {
            a = va;
            b = vb;
        }
这样就可以构造函数了 为什么要继承非要写成
   public RecTriange(int va, int vb)
     : base(va, vb, (int)(Math.Sqrt(va * va + vb * vb)))
        {
            a = va;
            b = vb;
        }
有必要吗?请按顺序解释 谢谢

解决方案 »

  1.   

    其实两个问题是一样的。因为你用了base就是用了基类的构造函数啥
      

  2.   

    这两个类之间的继承问题如下:       
     public Square(int va)
                : base(va, va)
            {
                ;
            } 
    这样写为什么只有一个分号?其他语句都可以略写吗?既然是构造函数 为什么没有定义域?难道这样可以继承吗?为什么只有一个分号 请问MS其他语句你指的是?为什么没有定义域----是在类的内部声明,这是C# 不是C++base(va, va) -- 是你继承的基类的构造
    这样就可以构造函数了 为什么要继承非要写成
       public RecTriange(int va, int vb)
         : base(va, vb, (int)(Math.Sqrt(va * va + vb * vb)))
            {
                a = va;
                b = vb;
            }
    有必要吗? -----    也不一定要写成这样,看你的需求了
      

  3.   

    new protected int a;
    new protected int b;
    你隐藏了基类的a,b