日期:2014-05-18  浏览次数:20808 次

新手求助,关于私有变量继承的问题

 class Quadrilateral : Shape
  {
  private CColor color;
  //定义四边形的四个顶点
  private Point point1, point2, point3, point4;

  public CColor Color
  {
  get
  {
  return color;
  }
  set
  {
  color = value;
  }
  }

  public Point Point1
  {
  get
  {
  return point1;
  }
  set
  {
  point1 = value;
  }
  }
  public Point Point2
  {
  get
  {
  return point2;
  }
  set
  {
  point2 = value;
  }
  }
  public Point Point3
  {
  get
  {
  return point3;
  }
  set
  {
  point3 = value;
  }
  }
  public Point Point4
  {
  get
  {
  return point4;
  }
  set
  {
  point4 = value;
  }
  }

  public Quadrilateral()
  {
  }
  public Quadrilateral(Point p1, Point p2, Point p3, Point p4)
  {
  point1 = p1;
  point2 = p2;
  point3 = p3;
  point4 = p4;
  }


  class Square : Quadrilateral
  {
  public Square()
  {
  }
  public Square(Point p1, Point p2, Point p3, Point p4)
  : base(p1, p2, p3, p4)
  {
  }

在四边形类中,那四个点不都是私有的吗,好像是继承到了正方形中(不是私有变量不能继承吗),为什么不用重新定义,好像是继承到了



------解决方案--------------------
base(p1, p2, p3, p4)

你这问题和私有变量一点关系都没有,是调用基类构造函数...去看MSDN...
------解决方案--------------------
继承的是公共属性而不是私有变量
------解决方案--------------------
继承概念没搞懂啊 继承的是公共属性而不是私有变量
------解决方案--------------------
汗,楼主是新手,大家不用太严厉. 告知就可以了.
------解决方案--------------------
鼓励新手!
不懂就问!
------解决方案--------------------
派生类实例都会包含一个完整的基类实例,无论字段私有与否,就像一个大盒子(派生类实例)套着小盒子(基类实例),基类私有的内容确实也到了派生类身体里,只是派生类看不见,但派生类可以通过基类公开的方法来间接访问之,你这个例子就是派生类通过基类公开的构造Quadrilateral(Point p1, Point p2, Point p3, Point p4)来访问基类的私有字段
------解决方案--------------------
呵呵,私有变量是能在类的内部被调用,但是它是一直都存在的,通过类内部的方法(构造函数)去访问一个私有变量,这样是没有问题的。属性的封装也就是这么来的。