C#继承
以下均为在菜鸟教程中学习的笔记
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
基类和派生类
一个类可以派生多个类或者接口,这意味着它可以从多个基类或接口继承数据和函数。
C#中创建派生类的语法如下:
<访问修饰符>class<基类>
{
...
}
class<派生类>:<基类>
{
...
}
实例如下:
using System;
namespace InheritanceApplication
{
/// <summary>
/// 基类
/// </summary>
class Shape
{
protected int width;
public void setWidth(int w)
{
width = w;
}
}
/// <summary>
/// 派生类
/// </summary>
class Rectangle : Shape
{
public int getWidth()
{
return width;
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
//打印对象的面积
Console.WriteLine("宽度:{0}", Rect.getWidth());
Console.ReadKey();
}
}
}
结果:
宽度:5
基类的初始化
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
实例:
using System;
namespace InheritanceApplication
{
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)
{
}
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();
}
}
}
C#多重继承
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。
C#不支持多重继承。但是,您可以使用接口来实现多重继承。
实例:
using System;
namespace InheritanceApplication
{
class Shape
{
protected int width;
protected int height;
public void setWidth(int w)
{
width = w;
}
public void setHeight(int h)
{
height = h;
}
}
//接口PaintCost
public interface PaintCost
{
int getCost(int area);
}
//派生类
class Rectangle : Shape, PaintCost
{
public int getArea()
{
return (width * height);
}
public int getCost(int area)
{
return area * 70;
}
}
class RectangleTester
{
static void Main(string[] args)
{
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();
//打印对象的面积
Console.WriteLine("总面积:{0}", Rect.getArea());
Console.WriteLine("油漆总成本:${0}", Rect.getCost(area));
}
}
}