【C#】C#中的继承 (继承、抽象类和抽象方法、接口)

C#抽象类和接口 抽象类 1、定义 Why: 计算器类(父类)里面有加减乘除四个功能都实现了,但是很子类继承后,有些方法都自己重写了,这个时候父类里面的这些方法功能就没有意义了。所以有些方法不需要都实现了,只需要声明即可(抽象方法)。 抽象类(what):类是一个具有相同特征和行为的抽象,而抽象类(class 前加上 abstract)没有指出行为的具体细节,而由他的子类去实现相应的行为。 把普通类前面加一个abstract关键字就是抽象类。 含有一个或多个抽象方法的类 2、案例 abstractcla.. 阅读详情

一、继承

什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。
1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。
派生类继承基类的语法如下:
using System;
public class Person
{
//这是基类
}
public class Student:Person
{
//这是派生类
}
注:派生类继承基类时用“:”符号连接,派生类继承基类的所有非私有成员变量和方法。
2、调用基类的构造函数:
如果对类没有定义显式构造函数,则编译器将提供默认的构造函数,以初始化这些类的成员字段。但是,如果显式添加了构造函数,就可以有效控制整个构造过程。
示例:
using System;
namespace Jicheng
{
//基类
public class Person
{
public string  _name;
public uint  _age;
//基类的构造函数
public Person(string name,uint age)
{
this._name = name;
this._age = age;
   //打印输出
Console.WriteLine(_name);
Console.WriteLine(_age);
}
}
//派生类
public class Student:Person
{
private uint _id;
//派生类构造函数并调用基类构造函数用“:base”
public Student(string name,uint age uint id):base(name,age)
{
this._id = id;

//打印输出
Console.WriteLine(_id);
}
}
public class Exercise
{
[STAThread]
static void Main(string[] args)
{
//构造 Student
Student objstudent=new Student(“XYZ”,45,001);
}
}
}
注:派生类通过使用:base()语法可以显式调用基类的构造函数。在必要的情况下,可以利用它来初始化字段。

二、C#中的方法重写
关键字:override
override关键字用语修改方法,具有override关键字修饰符的方法是对基类中同名方法的新实现,基类中的同名方法必须声明为virtual或abstract类型。给基类中的方法添加virtual关键字表示可以在派生类中重写它的实现。
1、默认的C#方法并非virtual,因此不能重写。
2、基类方法的可访问级别并不因重写它的方法而改变,他们的访问修饰符相同。
3、new、static和virtual关键字不能与override访问修饰符一同使用
关键字:virtual
C#中提供virtual关键字,用语将方法定义为支持多太,用于对一个类中可修改的方法的声明,这种方法称为虚拟方法,字类可以使用override关键字自由实现它们各自版本的虚拟方法
语法:
[
访问修饰符] virtual [返回值类型] 方法名称([参数列表])
{
  //虚拟方法的实现
}
1、virtual访问修饰符不能与static和override等访问修饰符一同使用
2、调用虚拟方法,在运行时系统会自动检查,以确定调调用了哪一个实现方法。
关键字:new
new访问修饰符用于显式隐藏继承自基类的成员,如果派生类成员与基类成员名称相同,new会将派生类成员识别为一个全新成员。
1、在一个方法中同时使用new和override将会出错。
2、new访问修饰符的真正目的是为了隐藏基类方法。
3、如果将一个方法生命为new,它实际上并没有隐藏基类方法,并且编译器也产生了警告,这时应该删除new。

三、抽象类和抽象方法
什么是抽象类:不能被实例化的类称为抽象类,抽象类是派生类的基类。
关键字:abstract
语法:
abstract class 类名
{
…………
}
1、一个抽象类可以同时包含抽象方法和非抽象方法。
2、抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型,不涉及主体代码,
3、派生自抽象类的类需要实现其基类的抽象方法,才能实例化对象。
4、使用override关键子可在派生类中实现抽象方法,经override声明重写的方法称为重写基类方法,其签名必须与override方法的签名相同。
示例:
using System;
namespace Example_5
{
//抽象类
abstract class ABC
{
  //抽象方法
  public abstract void Afunc();
}
//派生类
class Derv:ABC
{
  //实现抽象类中的抽象方法
  public override void Afunc()
{
   Console.WriteLine(“实现抽象方法”);
  }
}
public class Test
{
  static void Main(string[] args)
  {
   Derv obj=new Derv();
   obj.Afunc();
  }
}
}
5、基类实现抽象类,则派生类不需要重新实现该抽象类。
6、抽象类并不仅仅只是一种实现技巧,它更代表一种抽象的概念,从而为所有的派生类确立一种约定。

四、接口
关键字:interface
语法:
修饰符 interface 接口名
{
  //接口主体
}
1、一个接口就相当于一个抽象类,但是它不能半喊任何实现方法。
2、接口的每种方法都必须在派生类中实现。
3、接口有时候可以看成是类的模具,它指明一个类该提供哪些内容。
4、接口主体只限于方法、索引器、属性的声明。
5、接口中不能包含字段、构造函数和常量等。
6、接口成员是隐式公开的,如果对其显式指定访问级别,就会出现编译器错误。
7、在接口中不能实现任何方法,属性或者索引器。
8、在指定方法时,只需给出返回类型、名称和参数列表,然后以分号结束。
9、实现接口的语法与实现继承一样,都用冒号“:”
示例
interface Icustomer
{
………………
}
public class MyClass: Icustomer
{
………………
}
10、接口中的方法不能重写,只能实现。
11、
编码标准:
接口名称需始终冠以大写字母I

五、多重接口实现
C#中多重接口的实现,弥补了C#只能单一继承,不能多重继承弱点。
语法示例:
public intetface IName
{
       void Name();
}
public interface IAge
{
void Age();
}
public class Consoleshow: IAge, IName
{
public void Name()
{
//具体实现
}
public void Age()
{
//具体实现
}
}

六、显式接口实现
如果两个接口中有完全相同的签名,那么可以用“接口名.方法名”的方法显式的来实现接口。
示例:
public interface Iname
{
void Test();
}
public interface Iage
{
void Test();
}
public Test: Iname, Iage
{
void Iname Test()
{
// Iname借口的实现
}
void Iage Test()
{
// Iage借口的实现
}

}

七、接口继承
通过合并其他接口,也可以新建接口。用于合并接口的语法于继承的语法非常相似,只是前者可以将多个接口合并成一个。一个类要实现一个接口,必须为基接口和派生借口的所有成员编写代码。

ADS8681数据手册没讲透的细节:SPI时序、量程切换与电压换算的避坑指南 本文深入解析ADS8681数据手册未提及的SPI时序优化、量程切换陷阱与电压校准技巧。针对树莓派5与ADS8681的SPI通信问题,提供CPOL/CPHA配置建议;详解量程切换的位操作玄机与寄存器配置流程;并提出三步校准法应对非理想供电环境,帮助开发者提升ADC测量精度。 阅读详情

相关推荐

新手3dslicer手动肝脏切割及体积测量(详细图文)

刚接手软件的时候,我一直想用自动分割工具,试验了Med sam,依赖安装不了;试验了英伟达的AI,NvidiaAIAssis,传服务器根本没反应,所有只有用了手动切割。不要求所有层面勾画,但是最好是典型层面都勾画一下,特别是有毗邻脏器密度相近的层面。点击3D后可能三维窗口未显示,可以调整一下窗口大小,有可能显示在我们看见的范围之外。早就准备更新这篇了,由于懒癌发作,一直早葛优躺,今天刚好有点时间,就简单写下来。

linjianping513的博客 5904

C#中的继承 (继承、抽象类和抽象方法、接口)

最近在研究重构,所以对于类,接口这些研究的也比较多,然后看各种资料,只要我感觉到能学到东西,就记录下来,感觉是件有意义的事情。 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。派生...

1042

简单概述人形机器人的“大脑、小脑”

原创 仲翔云人形机器人产业通2024年09月13日 19:41上海人形机器人的大脑和小脑是其控制系统的关键组成部分,它们模拟了人类大脑和小脑的功能,以实现复杂的运动控制和决策过程。

AI生成曾小健3 2067

C# 反射获取超类(抽象,接口)下直接继承的类

以Listbox为例.获取Animal下的所有实现。方法Create 是对ClassData的解析,核心方法,获取超类下的之间继承类。反射和特性的一些通用方法。对超类直接继承的类,还有超类下面的超类再次解析是没有问题的;在dog中有三个直接继承者,其中还有一个抽象[CutDog],再去CutDog中找到两个继承者。...

wch3351028的博客 2632

PSINS惯性系初始对准与代码解读

本文参考“摇摆基座上基于信息的捷联惯导粗对准研究”(秦永元),以及“严恭敏博士后研究报告”,详细解读并推导了静基座惯性系对准算法,并与PSINS代码进行对照解读。

u011012050的博客 6745

Haclon案例-找出图中面积最大的圆

自带的函数,求得圆的面积和圆心点坐标,然后,用本章所学习的选择算子和循环算子找出面积最大的圆。的图片,试着给它加上不同种类的噪声,然后找出其中面积最大的圆,并将圆的面积标注在其圆心位置。可知,除了六个圆形之外,还有一些微小的噪声点,采用了开运算和特征选择的方法去除噪声。1. 该图片为一灰度图,对其进行二值化,二值化后如图。4. 在面积最大圆的圆心坐标位置写上该圆的面积。

qq_20660115的博客 892

类在继承类的同时实现多接口

接口和类之间可以通过实现产生关系,同时类与类之间可以通过继承产生关系。当一个类已经继承了一个父类,它又需要扩展额外的功能,这时接口就派上用场了。 子类通过继承父类扩展功能,通过继承扩展的功能都是子类应该具备的基础功能。如果子类想要继续扩展其他类中的功能呢?这时通过实现接口来完成。 class Fu { public void show(){} } i...

weixin_41874888的博客 3419

学Simulink——基于软开关与高频变换的整流器系统场景实例:移相全桥ZVS整流器在轻载条件下的效率优化

本文以Simulink为平台,详细介绍了移相全桥ZVS整流器在轻载条件下的建模与优化方法。通过六个步骤系统讲解了从项目创建到仿真运行的全过程,重点分析了移相全桥拓扑结构、ZVS检测逻辑设计及轻载特性。结果显示,传统移相全桥在轻载时ZVS失效导致效率下降(<88%)。针对此问题,提出了动态频率调整、不对称半桥模式等优化策略。该案例为理解软开关技术、提升电源效率提供了实用建模方法和优化思路。

xiaoheshang_123的博客 114

简单实现继承一个抽象类的同时实现接口

定义一个抽象类animal /** * * @author ljf *定义一个抽象类animal 关键字abstract */ public abstract class Animal { //将动物共有属性进行封装 名字 年龄 颜色 性别 说话 private String name; private int age; private String color; private char sex; private String speak; //设置set/get方

m0_65240507的博客 1058

ubuntu emto-cpa安装与编译

ubuntu emto-cpa安装与编译

qq_45834835的博客 1430

C#的GDI+绘图详解

/消除锯齿 或 AntiAlias。// 1.在窗体或控件的Paint事件中,用PaintEventArgs e 创建绘图对象 ---- 控件或窗体重绘时。//为控件创建绘图对象。//--------------------以上方法三选一。//2.创建绘图对象 panel1中绘图。

weixin_50920631的博客 3452

11.2一个子类可以同时继承抽象类和实现接口

package study; //一个子类可以同时继承抽象类和实现接口 //接口 interface A{ public static final String FLAG="天河学院"; public abstract void print(); public abstract String getInfo(); } //抽象类 abstract class B{ public ab...

P_ning的博客 3853

YOLO算法:关于目标检测算法的基本介绍(小白入门必读)

目标检测算法是一种计算机视觉算法,用于在图像或视频中识别和定位特定的目标物体。本节课就给大家重点介绍下基于深度学习的目标检测算法!

小哥谈 2516

C#中的接口、继承、多态、重写、虚方法、抽象方法&抽象类、密封类

接口 interface 接口里面规定了一些规则、方法,但是接口不提供默认实现。(C#3.0之后,接口内也可以提供默认实现) 继承某个接口的话就要实现该接口里的所有方法。 继承 : 类的定义处,用冒号加父类的形式表示类的继承。子类可以使用父类里面的非private标记的方法和属性,也可以重写父类带override/virtual或父类所继承的接口的方法。 子类可以拥有只属于自己(不属于父类)的方法和属性。静态类或者静态成员无法继承或重写。 eg. ChildClassName : ParentC

weixin_41683569的博客 1094

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C#中抽象类、抽象方法和接口暨内联临时变量的精彩表达

发一份总结,挣点流量。

wenchm的博客 948

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Unity】Unity C#基础(九)继承、多态、抽象类、接口、抽象方法、虚方法、重写、覆盖

抽象类 抽象属性 接口 委托 抽象方法 虚方法 匿名方法 更多内容请查看总目录【Unity】Unity学习笔记目录整理

一个普普通通的游戏开发者 6731

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C#中的继承 (继承、抽象类和抽象方法、接口)【转载】

转载自:http://blog.csdn.net/wokeyid/article/details/2391314 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。1、继承C#中的类:C#不支持多重继承,C#类始终继承自一个基类(如果未在声明中指定一个基类,则继承自System.Object)。派生类继承基类的语法如下:u...

weixin_30650859的博客 73

.NET 中的抽象类和抽象方法

如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法。4:抽象类中的成员可以私有的(只要不是抽象的)、受保护的、内部的或受保护的内部成员,但接口中的成员必须是公共的。1:它们的派生类只能继承一个基类,即只能继承一个抽象类,但是可以继承多个接口。2:抽象类中可以包含抽象成员,但非抽象类中不可以。2:抽象类中可以定义成员的实现,但接口中不可以。1:抽象方法必须声明在抽象类中。

学IT的人 711

C#中抽象类与抽象方法的作用与实例

在C#中,允许把类和方法声明为抽象类与抽象方法,具体的声明方法是在类名或方法名前加上abstract关键字。那么我们什么时候应该用抽象类呢?如果一个类设计的目点是用来被其它类继承的,它代表...

zls365365的博客 2246

C#-抽象类与接口

抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象的基类,贡献某些主要的特性,例如共同的目的和结构。接口则主要是用于类,为这些类去添加不同的方法(行为)。

qq_43733614的博客 3818

C# 接口 抽象类与抽象方法 密封类与密封方法

抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别如下。抽象类不能直接实例化。抽象类中可以包含抽象成员,但非抽象类中不可以。抽象类不能被密封。C#中声明抽象类时需要使用abstract关键字,具体语法格式如下。访问修饰符 abstract class 类名:基类或接口//类成员{ }抽象方法就是在声明方法时,加上abstract关键字,声明抽象方法时需要注意以下两点。抽象方法必须声明在抽象类中。

钢铁男儿 1121

Unity-XLua(3)-抽象类与抽象方法

1.抽象类中的成员可以是抽象成员,也可以是非抽象成员。2.一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法。6.一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口。4.通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现。5.一个抽象类能够继承另一个非抽象类,继承了基类的方法,添加新的抽象和非抽象方法是可行的。3.抽象方法只存在于抽象类的定义中,非抽象类中不能包含抽象方法。

Asincereman的专栏 555

c#:浅析接口(interface)与抽象类(abstract)的区别

在学习c#接口(interface)和抽象类(abstract)的时候 发现接口和抽象类极为相似,比如说:继承后都需要重写,或者都不能通过new关键字来实例化… ,那么他们之间到底有什么区别与联系 ? 一、接口的特征 ​ 1、接口使用interface关键字声明 ​ 2、接口中的成员有属性、方法、事件,索引器并且都没有实现部分,可以说是没有方法体 ​ 3、接口中不能声明字段,接口中的成员不能使用任何修饰符 ​ 4、继承接口的类或结构必须隐式或显式实现接口中的所有成员 ​ 5、一个接口允许...

Peter的博客 1万+
上一篇: Unity 脚本生命周期流程图
下一篇: 【C#】C#接口深入理解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值