C#是一种面向对象的编程语言,它支持多继承,即一个子类可以从多个基类中继承属性和方法。多继承可以使子类具有多个基类的特性,从而更好地实现代码重用。
C#中的多继承是通过“:”来实现的,例如:
public class ChildClass : BaseClass1, BaseClass2 { // 子类代码 }
上面的代码表明ChildClass是BaseClass1和BaseClass2的子类,它将从这两个基类中获得特性。
C#中的多态也可以用于实施多态。例如,我们可以使用多态来创建一个函数,该函数可以接受不同子类的对象作为参数并返回不同子类的对象作为返回值。
public class BaseClass { public virtual BaseClass DoSomething(BaseClass obj) { // 实施逻辑 return obj; } } public class ChildClass : BaseClass { public override BaseClass DoSomething(BaseClass obj) { // 实施逻辑 return obj; } }
上面的代码表明DoSomething函数可以接受不同子类的对象作为参数并返回不同子
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
派生类只能有一个直接基类,但一个基类可以有多个直接派生类。继承是可以传递的。定义要从其他类派生的类时,派生类会隐式获得基类的所有成员(除了其构造函数和终结器)。派生类因而可以重用基类中的代码,而无需重新实现。在派生类中,可以添加更多成员。通过这种方法,派生类可扩展基类的功能。
C# 中创建派生类的语法如下:
<acess-specifier> class <base_class>{
...
}
class <derived_class> : <base_class>{
...
}
假设,有一个基类 Shape,它的派生类是 Rectangle:
using System;
namespace InheritanceApplication{
class Shape {
public void setWidth(int w){
width = w;
}
public void setHeight(int h){
height = h;
}
protected int width;
protected int height;
}
// 派生类
class Rectangle: Shape{
public int getArea(){
return (width * height);
}
}
class RectangleTester{
static void Main(string[] args){
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// 打印对象的面积
Console.WriteLine("总面积: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
总面积: 35
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
下面的程序演示了这点:
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){ }
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();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
长度: 4.5
宽度: 7.5
面积: 33.75
成本: 2362.5
C# 不支持多重继承。但是,您可以使用接口来实现多重继承。下面的程序演示了这点:
using System;
namespace InheritanceApplication{
class Shape {
public void setWidth(int w){
width = w;
}
public void setHeight(int h){
height = h;
}
protected int width;
protected int height;
}
// 基类 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));
Console.ReadKey();
}
}
}
当上面的代码被编译和执行时,它会产生下列结果:
总面积: 35
油漆总成本: $2450
接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。接口定...
linux 安装python依赖包 3种方法1. 使用pip安装:在终端中输入:pip install 包名2. 使用源码安装:下载源码包,解压后进入源码...
ChatGPT是一个自然语言生成(NLG)模型,旨在采用预测语言对对话进行智能建模。它是一个语言建模器,专门用于社交媒体、搜索结果...