C# 继承 基类和派生类基类的初始化C# 多重继承
时间:2022-07-22
本文章向大家介绍C# 继承
基类和派生类基类的初始化C# 多重继承,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
C# 继承
继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。
继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
基类和派生类
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
C# 中创建派生类的语法如下:
<访问修饰符符> class <基类>
{
...
}
class <派生类> : <基类>
{
...
}
假如一个基类是Shape,一个派生类是Rectangle。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace week2._1
{
// 基类
class Shape
{
public void setLength(int len)
{
length = len;
}
public void setWidth(int wid)
{
width = wid;
}
protected int length;
protected int width;
}
//派生类
class Rectangle : Shape
{
private int height;
public int getArea()
{
return length * width;
}
}
class Program
{
static void Main(string[] args)
{
//创建对象
Rectangle rect = new Rectangle();
rect.setLength(5);
rect.setWidth(6);
Console.WriteLine(rect.getArea());
Console.ReadLine();
}
}
}
结果:
30
基类的初始化
派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace week2._1
{
class Rectangle
{
//成员变量
protected double width;
protected double lenght;
//构造方法
public Rectangle(double l, double w)
{
width = w;
lenght = l;
}
//面积
public double GetArea()
{
return width *lenght;
}
//显示
public void Display()
{
Console.WriteLine("长度:{0}", lenght);
Console.WriteLine("宽度:{0}", width );
Console.WriteLine("面积:{0}", GetArea());
}
//继承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;
}
//重写Display方法
public void Display()
{
//base.Display();
Console.WriteLine("成本:{0}", Getcost());
}
}
class Test
{
static void Main(string[] args)
{
Tabletop t = new Tabletop(4.5, 5.5);
t.Display();
Console.ReadKey();
}
}
}
}
结果:
成本:1732.5
C# 多重继承
多重继承指的是一个类别可以同时从多于一个父类继承行为与特征的功能。与单一继承相对,单一继承指一个类别只可以继承自一个父类。
C# 不支持多重继承。但是,您可以使用接口来实现多重继承。下面的程序演示了这点:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace week2._1
{
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 test
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
int area;
r.setHeight(7);
r.setWidth(8);
area = r.getArea();
Console.WriteLine(area);
Console.WriteLine(r.getCost(area));
Console.ReadKey();
}
}
}
结果:
56
3920
关于继承的几点:
- 1、继承的语法:class 子类类名 : class 父类类名{ //子类类体 }
- 2、继承的特点:子类拥有所有父类中所有的字段、属性和方法
- 3、一个类可以有多个子类,但是父类只能有一个
- 4、一个类在继承另一个类的同时,还可以被其他类继承
- 5、在 C# 中,所有的类都直接或者间接的继承自 Object 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace week2._1
{
class Program
{
class father
{
public father()
{
Console.WriteLine("father");
}
}
class son : father
{
public son()
{
Console.WriteLine("son");
}
}
static void Main(string[] args)
{
son s = new son();
Console.ReadKey();
}
}
}
结果:
father
son
- 需要了解的pssh(r11笔记第28天)
- 二分查找算法基本思想
- Flyod 算法(两两之间的最短路径)
- HDUOJ-4104 Discount
- HDUOJ-----1085Holding Bin-Laden Captive!
- HDUOJ-----1098 Ignatius's puzzle
- 转--shell脚本备份mysql数据库
- NYOJ——————数的长度(斯特林公式的应用)
- 关于ssh命令的几个使用小技巧(r11笔记第27天)
- Golang语言社区--消息触发服务器启动基础模块分享
- NYOJ------汉诺塔(一)
- HDUOJ----Coin Change
- Golang语言社区--列出目录和遍历目录的方法
- HDUOJ-------单词数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch 中的重要模块化接口nn.Module的使用
- 东京大学版「一生一芯」:自制CPU、C编译器,还成功运行了类Unix系统
- python实现将range()函数生成的数字存储在一个列表中
- Pytorch 使用不同版本的cuda的方法步骤
- CVE-2020-14645 Weblogic远程代码执行漏洞分析
- PaGoDo:一款功能强大的被动式Google Dork
- 微软轻量级系统监控工具sysmon原理与实现完全分析
- 用Windows电脑训练深度学习模型?超详细配置教程来了
- rConfig中的远程代码执行漏洞分析
- CVE-2020-9964:iOS中的信息泄露漏洞分析
- ReconSpider:一款功能强大的高级OSINT框架
- Python 3.9来了!这十个新特性值得关注
- IRFuzz:一款基于YARA规则的文档文件扫描工具
- 内网渗透测试研究:从NTDS.dit获取域散列值
- 腾讯云大禹高防IP之客户端获取真实IP