c#中的继承学习总结
c#的继承方法,大体上和c++的类似,但是有点区别的,我这里刚刚初学,因此把重点记录下。
1、派生类继承了父类,那么,如果父类的方法和数据都是public,那么派生类都会继承。派生类可以直接调用父类的数据和成员函数,当然,数据最好是用成员函数来调用,做好封装性。
2、基类的初始化
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
实例:
using System;
namespace RectangleApplication
{
class Rectangle
{
// 成员变量
protected double length;
protected double width;
public Rectangle(double l, double w)
{
length = l;
width = w;
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine("长度: {0}", length);
Console.WriteLine("宽度: {0}", width);
Console.WriteLine("面积: {0}", GetArea());
}
}//end class Rectangle
class Tabletop : Rectangle
{
private double cost;
public Tabletop(double l, double w) : base(l, w)
{ } //注意这里的使用,类似是c++的。
public double GetCost()
{
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display()
{
base.Display();
Console.WriteLine("成本: {0}", GetCost());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
}
上面我添加注释了,派生类的初始化和基类的初始化。
main函数中实例化了一个Tabletop,
Tabletop t = new Tabletop(4.5, 7.5);
那么t.Display();调用方法之后,
public void Display()
{
base.Display(); //这里会调用基类的方法
Console.WriteLine("成本: {0}", GetCost());
}
这样就做到了继承。
3、如果想要使得派生类能够完全访问被隐藏的继承成员,就可以使用基类访问表达式访问被隐藏的继承成员。基类访问表达式由关键字base后面跟一个点和成员的名称组成。
上面base.Display();就是这个用法。
4、创建子类对象调用子类的构造函数时,会首先调用父类的无参构造函数
5、多重继承我这里没有看到比较好的实例,暂时不写。
6、c#引入了override和new的机制
override是重写,即将基类的方法在派生类里直接抹去重新写,故而调用的方法就是子类方法;而new只是将基类的方法在派生类里隐藏起来,故而调用的仍旧是基类方法。
这个在多态的时候再学习。