C#继承
来源:互联网 发布:青岛seo外包公司费用 编辑:程序博客网 时间:2024/06/08 15:34
C# 继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
基类和派生类
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
C# 中创建派生类的语法如下:
<acess-specifier> class <base_class>{ ...}class <derived_class> : <base_class>{ ...}
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(); } }}
基类的初始化
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
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(); } }}
C# 多重继承
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。
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(); } }}
在继承类中调用基类中的non-static函数也需要创建新的类的对象。
namespace StaticVarApplication{ class StaticVar { public static int num; public void count() { num++; } public int getNum() //Non-static method { return num; } } class StaticTester:StaticVar //继承类 { static void Main(string[] args) { StaticVar s = new StaticVar(); s.count(); s.count(); s.count(); Console.WriteLine("变量 num: {0}", StaticVar.getNum());//StaticVar.getNum() Error occured Console.ReadKey(); } }}
阅读全文
1 0
- C# 继承
- C#继承
- C# 继承
- C# 继承
- c# 继承
- C# 继承
- C#继承
- C# 继承
- C# 继承
- C# 继承
- C# 继承
- C#继承
- c#继承
- C# 继承
- C#继承
- C# 继承
- C# 继承
- C# 继承
- Android 线程池的使用
- 持续集成之⑤:jenkins结合脚本实现代码自动化部署及一键回滚至上一版本
- vue2.0构建单页应用最佳实战案例 vue.js
- [TensorFlow实战] 简单CNN
- 目录与文件的权限意义
- C#继承
- 【学习笔记】nodejs操作mysql增删改查
- dubbo+zoopkeeper入门详解
- Unity5.4 WWW频繁加载崩溃问题 Fatal signal 11 (SIGSEGV) at 0x00000004 (code=1)
- 改数据库表类型
- 通过 SSH 端口转发实现异地内网服务器互通
- HTML5之HSLA colors
- java4
- HDOJ1005:Number Sequence 快速数组幂