C#的抽象类别
抽象类,有3个特点:
第1个,不能被实例化。
第2个,类中的抽象方法在继承的子类中必须重写。
第3个,类一旦有抽象方法出现,那这个类必须定义为抽象类。
现实开发中,发现有共同的代码,可以把这些共同的代码放在一个抽象类中。举个例子,计算四边形的周长。
矩形,长方形,正方形:

class Rectangle
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} public Rectangle()
{ } public Rectangle(double a, double b)
{
this._A = a;
this._B = b;
} public double Perimeter()
{
return * (_A + _B);
}
}
Source Code
长斜方形,长菱形:

class Rhomboid
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} public Rhomboid()
{ } public Rhomboid(double a,double b)
{
this._A = a;
this._B = b;
}
public double Perimeter()
{
return * (_A + _B);
}
}
Source Code
梯形,不等边四边形:

class Trapezoid
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} private double _C;
public double C
{
get { return _C; }
set { _C = value; }
} private double _D;
public double D
{
get { return _D; }
set { _D = value; }
} public Trapezoid()
{ } public Trapezoid(double a,double b,double c,double d)
{
this._A = a;
this._B = b;
this._C = c;
this._D = d;
} public double Perimeter()
{
return _A + _B + _C + _D;
}
}
Source Code
从上面三个类别中,你均可以看到有一个方法,Perimeter()是计算四边形的周长。
经根博文开头所言,你可以把这个方法抽出来,放在一个抽象类中,统一接口:
public abstract class Quadrilateral
{
//周长
public abstract double Perimeter();
}
Source Code
把方法写成抽象方法之后,每个类需要继承此抽象类,并需要重写 override抽象的方法。



下面验证一下代码,如需要计算一个不规则的四边形的周长,那就是4条边相加:
在控制台运行:
C#的抽象类别的更多相关文章
- Verilog HDL模型的不同抽象级别
所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...
- php设计模式总结-工厂模式
使用工厂模式的目的或目标? 工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象.减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码. 通俗的说,以前创建 ...
- c# abstract抽象类与继承类子类的构造函数_base
http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...
- JSF标签大全详解
1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...
- Windows Phone – 裁剪图片 (Crop Image)
原文:Windows Phone – 裁剪图片 (Crop Image) 最近在处理图像的功能,对於图像的比例我也不是非常的清楚,因此,在编辑图片上花了不少时间. 该篇文章主要说明的是:如何对图片选择 ...
- java面向对象--抽象类和接口
如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...
- 关于Java中面向对象章节、IO 流中的重点基础知识。
一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多 ...
- Java几种常见的设计模式
--------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...
- 【Java基础】浅谈常见设计模式
Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...
随机推荐
- CloudSim——云计算仿真软件概述
CloudSim是由澳大利亚墨尔本大学的网格实验室和Gridbus项目宣布推出的云计算仿真软件. CloudSim是做什么的呢?可以简单理解为一个帮助研究.开发.测试的工具,如虚拟机资源分配算法.节能 ...
- loadrunner 场景设计-负载生成器管理
场景设计-负载生成器管理 by:授客 QQ:1033553122 1 简介 当执行一个场景时,Controller把场景中的每个用户配到负载生成器(Load generator). 所谓的负载生成器 ...
- wap2app(六)-- wap2app的原生标题头无法隐藏
大概有一个星期没有用HBuilder打包,今天更新了HBuilder版本再继续打包,就出现了一系列问题.其中有一个就是打包之后,除首页外,其他页面多出了原生标题,如下图: 查阅资料,打开 sitema ...
- (后端)sql server 按时间段查询
百度的资料,保存下来: 在写按时间段查询的sql语句的时候 一般我们会这么写查询条件: where date>='2010-01-01' and date<='2010-10-1'. 但是 ...
- Python tab键命令补全
pip install pyreadline import rlcompleter, readline readline.parse_and_bind('tab: complete') root@pe ...
- linux中使用nfs共享文件
NFS需要使用远程过程调用 (RPC),也就是说,我们并不是只要启动NFS, 还需要启动RPC这个服务 服务器端 CentOS 7.4 ip:172.16.0.1 共享/tmp目录 共享/data目录 ...
- python-Tkinter整理总结
笔者学习Tkinter模块也有好久时间了,现将学习的做以整理. tkinter简介(一) tkinter中lable标签控件(二) tkinter中button按钮控件(三) tkinter中entr ...
- go xorm增删改查
1.增加 如果传入的bean不是完整的bean,并且传入了地址,则调用结束后会被赋值// InsertOne insert only one struct into database as a rec ...
- domain or business logic
Here are a few of the questions you should ask when writing business logic: ¡Do you fully understand ...
- VScode启动后cup100%占用的解决方法
新安装的vscode,版本1.29.1.启动后,cpu占用一直是100%,非常的卡.百度以下,找到了解决方法,整理一下. 解决方法:在VScode中文件->首选项->设置->搜索-& ...