关于C#继承的简单应用代码分析
作者:只吃肉不喝酒 发布时间:2021-10-28 13:11:31
标签:C#,继承
比如,现在有一些图形,需要计算他们的面积,计算面积的方法都不一样,可以这么做
声明一个抽象类
//基类
abstract class Shape
{
//抽象方法 计算面积
public abstract double ComputerArea();
}
声明子类
//子类 继承Shape 实现抽象方法
class Circle : Shape
{
private double _radius;
//构造函数
public Circle(double radius) => _radius = radius;
//实现抽象方法
public override double ComputerArea()
{
return _radius * _radius * Math.PI;
}
}
//子类 继承Shape 实现抽象方法
class Rectangle : Shape
{
private double _width;
private double _height;
//构造函数
public Rectangle(double width, double height)
{
_width = width;
_height = height;
}
//实现抽象方法
public override double ComputerArea()
{
return _width * _height;
}
}
//子类 继承Shape 实现抽象方法
class Triangle : Shape
{
private double _bottom;
private double _height;
//构造函数
public Triangle(double bottom, double height)
{
_bottom = bottom;
_height = height;
}
//实现抽象方法
public override double ComputerArea()
{
return _bottom * _height / 2;
}
}
声明计算类
//计算类
class Calculate
{
//传入一个父类作为参数,调用方法
public void Calc(Shape shape)
{
Console.WriteLine($"{shape.GetType().Name}的面积:{shape.ComputerArea()}");
}
}
测试
class Program
{
static void Main(string[] args)
{
var circle = new Circle(5);
var rect = new Rectangle(5, 10);
var triangle = new Triangle(6, 8);
var calc = new Calculate();
calc.Calc(circle);
calc.Calc(rect);
calc.Calc(triangle);
}
}
运行结果
实际上 如果是只有这个方法要实现的话,继承接口也是可以的!
实例扩展:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/**
* 假设我们公司有两种程序员:
* java程序员指的是用java语法写程序的程序员,用Jpro这个类表示;
* C#程序员指的是用C#语法写程序的程序员,用Cpro这个类来表示。
* 每个类都有一个WriteCode()方法。
* 都属于程序员,用Programmer这个类表示。
* 现在公司来了一个项目,要求派某个程序员写一个程序。
*/
namespace inheritApplication
{
//程序员类(基类)
class Programmer
{
public string name = "我是程序员";
}
//java程序员类
class Jpro
{
public string name = "java程序员";
public string language = "我用java语法写代码";
}
//C程序员类
class Cpro
{
public string name = "C#程序员";
public string language = "我用C#语法写代码";
}
//编写项目类
class Pro : Programmer //继承基类
{
public void WriteProgram(Jpro program) //继承java程序员类
{
Console.WriteLine("" + program.name + ":" + name + "," + program.language + "");
}
public void WriteProgram(Cpro program)
{
Console.WriteLine("" + program.name + ":" + name + "," + program.language + "");
}
}
//主程序
class Program
{
static void Main(string[] args)
{
Pro p = new Pro();
Jpro p1 = new Jpro();
p.WriteProgram(p1);
Cpro p2 = new Cpro();
p.WriteProgram(p2);
Console.ReadKey();
}
}
}
来源:https://www.cnblogs.com/AtTheMoment/p/14723851.html


猜你喜欢
- 节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。内存映射文件对于托管世界的开发人
- 介绍责任链模式是一种行为型设计模式,其目的是将请求从一个对象传递到另一个对象,直到找到能够处理该请求的对象为止.再责任链模式中,每个对象都持
- 一、案例介绍模拟一个商品的站内搜索系统(类似淘宝的站内搜索);商品详情保存在mysql数据库的product表中,使用mybatis框架;站
- 单点登录三种方式单点登录的三种实现方式:分别为session广播机制;cookie+redis;tokensession广播机制指在一个集群
- poi导入纯数字等问题用poi导出excel时候,如果单元格设置纯数字,输入的数据一旦过大就是自动显示成科学记数法,导致导入后的数据出错,解
- 背景1> 大家都知道SpringBoot是通过main函数启动的,这里面跟踪代码到处都没有找到while(true),为什么启动后可以
- SpringCloud 整合ribbon的时候出现了这个问题java.lang.IllegalStateException: No inst
- C#实现委托namespace Delegate{ delegate void DGSayiHi(string n
- Spring如何使用 * 缓存解决循环依赖在没开始文章之前首先来了解一下什么是循环依赖@Componentpublic class A {@A
- 范例说明Android的Widget,有许多是为了与User交互而特别设计的,但也有部分是作为程序提示、显示程序运行状态的Widget。现在
- 本文实例讲述了C#导出数据到csv文件的通用类。分享给大家供大家参考。具体如下:通过这个类可以很简单的定义数据格式,并导出到csv文件//这
- 本文实例讲述了用WebBrowser操作frame和iframe的方法,比较适合C#初学者参考学习。示例浅显易懂,具体方法如下:
- mybatis一直加载xml,找到错误我们在写springmvc+mybatis项目,启动项目的时候,mapper配置文件一直刷,一直加载。
- 在作应用系统开发时,管理配置是必不可少的。例如数据库服务器的配置、安装和更新配置等等。由于Xml的兴起,现在的配置文件大都是以xml文档来存
- 一,概念1,排序排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 平时的上下文中,如果提到排序,通常指的
- 方法一:public class MainActivity extends Activity { @O
- 问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)Ree
- 1.Hibernate中的多表查询 1.1SQL中的多表查询【交叉连接】select * from A,B;【内连接】显示内连接:
- 前言最近做了一个调查问卷导出的功能,需求是将维护的题目,答案,导出成word,参考了几种方案之后,选择功能强大的freemarker+固定格
- AspectJ简介它不属于spring;AspectJ是一个AOP的框架;定义了AOP语法;有一个专门的编译器用来生成遵守Java字节编码规