类 、接口、多态、重载 |
名称 |
解释 |
定义 |
范式 |
类 |
类是一种数据结构; 类是现实对象或关系的模拟(抽象),包含静态属性和动态方法; 类是具有相同或相似结构、操作和约束 规则的对象集合。 |
声明类 |
class-modifiers class class-name { //属性 //方法 } 说明class-modifiers:类修饰符,见下表,class-name 为类名
|
对象 |
对象是类的具体化实例 (类的实例化:如“Student s=new Student()”) |
创建类实例 |
class-name object-name=new class-name ([parameter-list])
class-name:类名 object-name:对象名(类的实例名)
|
域 |
域又称成员变量,表示存储位置。 如 private int nAge |
属性(或域)定义 |
attribe-modifier data-type attribute-name;
attribe-modifier: 修饰属性,包括:public、private、protect data-type:数据类型 attribute-name:属性名称
|
属性 |
客观实体性质的抽象,属性是一个特殊接口,属性提供了3种接口:①只读(get)②只写(set)③可读可写(get和set)。 get():取值函数 ,获取域的值; set():为域赋值,使用value关键字获取用户输入 用“.”实现对属性或方法的访问 s.strname="张三" s.SetAge(20) 表示对SetAge方法进行赋值
|
静态属性 |
类的属性,而非对象的属性 |
static定义静态属性 |
使用static定义静态属性
如:public static int nCount;//静态属性,学生人数
|
方法 |
实体所能执行的操作 ,方法定义: 方法修饰符 返回类型 方法名(){...},如“public void SetAge(int p_nage){...}” |
方法定义 |
method-modiffier return-type method-name(parameter-lish);
method-modifier: 访问属性,包括:public、private、protect return-type:返回类型 method-name:方法名称 parameter-lish:参数列表
|
静态方法 |
类所具有的行为,而非对象具有的行为 |
static声明静态方法 |
使用static声明静态方法,static放在方法返回类型前 method-modifier static return-type method-name(parameter-list){…} 注意:1>访问属性很少有private 2>在静态方法中不能使用this关键字,因为this是指实例化后的对象本身,而静态方法的调用是不需要实例化对象的。
|
访问父类方法 |
使用base关键字 |
|
base.父类方法名(); |
方法参数 |
调用方法时传递给它的变量。 主要分为两类: ①传递数据值:把数据值传递给方法; ②传递数据的地址: 把变量的内存地址传递给方法。
|
ref 传递引用参数 (引用传递) out 传出参数值
|
总的说来,Ref和Out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。稍有不同之处是: 1>使用Ref型参数时,传入的参数必须先被初始化。而Out则不需要,对Out而言,就必须在方法中对其完成初始化。 2>使用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。 3>Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候。 |
params传递多个参数 |
params 关键字 指明一个输入参数被看作一个参数数组,这个类型的输入参数只能作为方法的最后一个传入参数。 Public void SetHobby(params string[] _strArrHobby)
|
构造函数 |
与类同名的方法,不过没有返回数据类型,其功能时在实例类时实现初始化工作 |
析构函数 |
~类名(),实现“收尾”工作 ,如关闭数据库连接 等 |
继承 |
本质代码重用 ,用“:”实现继承 (子类:父类 )备注:C#只支持单继承,即一个类只能继承一个父类。 |
格式 |
boy-class-modifiers class boy-class-name :father-class-name |
重载 |
指允许存在多个同名函数,而这些函数的参数不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。 |
重载属性 |
重载属性 解决了父类与子类相同属性冲突的问题。 1>重载属性: 子类具有父类相同的属性。 2>在某种意义上,重载可理解为“覆盖”,即以子类的定义为准。 3>在重载时, 属性名称、数据类型、访问级别都应与父类一致。 4重载后子类中的属性访问级别不能超越父类,即父类中只有set(或get),那么子类中也只能有set(或get),如果父类有set和get ,那么子类可以只有一个,也可两个都有。 |
重载方法 |
同样的方法名,完成功能相似、具体实现不同的任务 |
重载运算符 |
重载后的运算符 既具有原来功能又具有重载(重定义)的新功能 |
抽象方法 |
只包含方法的定义,没有具体实现的方法,需要其子类或子类的子类来具体实现 |
用abstract 定义抽象方法和抽象方法 |
可理解为“虚拟函数” 用abstract 定义抽象方法 public abstract void Trin(); |
抽象类 |
包含一个或多个抽象方法的类 ,抽象类不能实例化,因为包含了没有具体实现的方法。 |
public abstract class player{...} 子类继承抽象父类后,可以使用override 关键字覆盖抽象类中的抽象方法,并作具体实现。 Public override void Train(){...}
|
多态 |
父类定义抽象方法,在子类对其进行实现后,将子类赋值给父类,然后在父类中通过调用抽象方法来实现子类的具体功能 |
|
可理解为“同一指令下,以多种形态执行”,同一对外接口 完成不同功能
|
区分多态和重载 |
共同点:同一对外接口 完成不同功能。 重载:是指允许存在多各同名函数,而这些同名函数参数不同。 (对于编译器来说,这些同名函数已是不同函数,调用地址在编译期就绑定)这称为“早绑定”或“静态绑定”。 多态:是指子类重新定义父类的虚函数。(父类根据赋给它的不同子类,动态调用属于子类的该函数,这样的函数调用在编译期无法确定的,而编译器只有等到函数调用的那一刻,才会确定要调用的具体函数) 这称为“晚绑定”或“动态绑定”。
|
接口 |
接口和抽象类非常类似,它定义了一些未实现的属性和方法,所有继承它的类都继承了这些成员。可以把接口理解为一个类的模板。 |
声明接口 |
access-modifier interface interface-name { //interface members (接口的成员访问级别规定为public,故不用在声明时实用访问级别修饰符。) }
|
接口实现 |
在声明接口后,类就可以通过继承接口来实现其中的抽象方法,使用冒号“:”实现继承,将待继承的接口放在类后面。 |
|
class-modifiers class class-name:interface-name { ... }注意:实现接口的方法中不需要使用 override 关键字。
|
接口和抽象类的关系 |
相似: ①两者都包含可以由子类继承的抽象成员; ②两者都不能直接实例化。
|
|
区别:接口用于定义组件间的行为合同。抽象类用于定义类层次的共同基类。 ①抽象类除拥有抽象成员外,还可拥有非抽象成员; 而接口所有成员都是抽象的。 ②抽象类的抽象成员可以是私有的,而接口的成员一般都是公有的。 ③接口不能包含构造函数、析构函数、静态成员和常量。 ④抽象类只支持单继承,即一个子类只能继承一个父类。而一个子类却可以继承多个接口
|
命名空间 |
是相关类的逻辑层次结构,便于更好的管理“类”。,类和命名空间的关系,可理解为“文件”和“文件夹”的关系。 |
相关推荐
c# 初学者必需掌握的 多态,接口,线程,重载等等
重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在...多态:c#的多态性主要体现在类的继承上:子类继承父类的时候,可能出现同名但方法定义不同的情况, 所以在子类中会将原方法覆盖,实现自身的要求
主要介绍了C#中多态、重载、重写区别,采用实例较为通俗易懂的分析了多态、重载的重写的概念与用法,对于C#初学者有非常不错的借鉴价值,需要的朋友可以参考下
对象编程语言最容易搞混这些概念:重载、多态、虚方法、抽象方法。还有这些关键字abstract/virtual/base/overrid/new应该在什么时候用。 本文档用最精简的文字描述了这些概念的区别,并有源码示例。刚看可能觉得写的...
关于继承和多态的综合简单项目! 运用以前的泛型集合作为基础 在类的基础上添加构造函数以及重载方法
对于C#中的数据类型、去处符、类、接口、多态、继承、重载、流程控制、命名规则等基础知识进行了精炼的总结归纳,肯定对你有用的。
多态:即一个接口,多个功能 同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果 多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在...
密封类:密封类不能作为基类被继承,但可以继承别的类或接口,密封类中不能声明受保护的成员或虚成员,密封类不能声明为抽象的,声明密封类用sealed.密封方法只能用于对基类的虚方法进行实现,声明密封方法时同时...
17.抽象类与接口的比较 17. 分部类及其优点 18. Array与ArrayList的区别 19. 集合与泛型集合的区别 20.试述完整的事件处理系统的组成要素? 21.事件驱动模型 22. C#函数中无参数修饰符、out修饰符、params修饰...
面向对象三要素:封装、继承、多态。 封装和继承,这两个比较好理解,但要理解多态的话,可就稍微有点难度了。今天,我们就来讲讲多态的理解。 我们应该经常会看到面试题目:请谈谈对多态的理解。 其实呢,多态非常...
涵盖C#基础内容,多态,重载,引用,静态非静态,接口,算法,数据结构等。适合初学者学习。
c# 课件 初学者 基础篇 重载 多态 委托 事件 继承 集合类及其接口 文本处理和IO c#高级编程
通过本书的学习,读者可以逐步掌握C#程序设计。 本书难度适中,实例丰富,可操作性强,可作为高等学校计算机相关专业的教材或参考用书,也可供广大程序员参考。 目录 第1章.NET平台与Visual Studio开发工具 1.1...
2.1 改进《实验三 面向对象初步》中的日期类 2.2 使用改进后的日期类,修改《实验四 对象作为数据成员》中的雇员类 2.3 测试 getMostFaith
6.c#基础重载 7.c#基础递归 8.c#基础数组 9.c#基础引用 10.c#基础引用 - 作业 11.c#基础ref和out 12.c#基础二分查找法 13.c#基础数组选择排序 14.c#基础数组冒泡排序 15.c#基础二维数组 16.c#进阶类的设计 17.c#进阶...
1. C#程序特点 2. 枚举型与结构型的区别 3.... 抽象类与接口的比较 (抽象类与接口的区别ppt4) 17. 分部类及其优点 18. Array与ArrayList的区别 (ppt5) 19. 集合与泛型集合的区别 20. 事件驱动模型
在开始学习C#之前,先了解下C#语句的特点: 1. C#是区别大小。2. 每一句都以分号结束,不象VB.NET。3. 多个语句通过分号可以写在一行,不过不推荐,因为不清晰。OK,开始了。 先了解下其数据类型: bool true...
著名的技术作家Jesse Liberty以一种最适合有经验的程序员口味的方式--紧扣Microsoft全新.NET平台的大背景本书的第一部分介绍了C#的基础知识,进而阐释了以下内容:类与对象、继承与多态、操作符重载、结构体与接口、...
第二篇是面向对象基础篇,主要介绍类、对象、字段、方法、流程控制、数组、继承、属性、运算符重载、接口等C#基本内容。第三篇是应用技术篇,主要介绍的是异常处理、文件和流、委托、事件、Lambda表达式、命名空间、...