首页 > 编程语言 >C# 学习总结 之 类 、接口、多态、重载

C# 学习总结 之 类 、接口、多态、重载

时间:2022-11-28 17:36:38浏览次数:40  
标签:name C# 子类 多态 接口 重载 父类 方法 class


 类 、接口、多态、重载

 名称

解释

定义

范式

类是一种数据结构;

类是现实对象或关系的模拟(抽象),包含静态属性和动态方法;

类是具有相同或相似结构、操作和约束 规则的对象集合。

声明类

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 关键字。

接口和抽象类的关系

相似:

①两者都包含可以由子类继承的抽象成员;

②两者都不能直接实例化。


区别:接口用于定义组件间的行为合同。抽象类用于定义类层次的共同基类。

①抽象类除拥有抽象成员外,还可拥有非抽象成员; 而接口所有成员都是抽象的。

②抽象类的抽象成员可以是私有的,而接口的成员一般都是公有的。

③接口不能包含构造函数、析构函数、静态成员和常量。

④抽象类只支持单继承,即一个子类只能继承一个父类。而一个子类却可以继承多个接口

命名空间

是相关类的逻辑层次结构,便于更好的管理“类”。,类和命名空间的关系,可理解为“文件”和“文件夹”的关系。

标签:name,C#,子类,多态,接口,重载,父类,方法,class
From: https://blog.51cto.com/javaalpha/5892768

相关文章

  • c# 学习总结 之 数据类型
    数据类型值类型简单值类型名称CTS类型说明范围前界后界备注整数类型sbyteSystem.Sbyte8位有符合整数(-2^7~2^7-1)-128127有符合shortSystem.Int1616位有符合整数(-2^15~2^15-......
  • Myeclipse7.0注册码及注册机的源代码
    //Myeclipse7.0注册码及注册机的源代码//2009-01-0814:23Myeclipse7.0注册机的源代码,真强!这个源代码号称支持Myeclipse6.5和7.0两个//版本,java的代码,很爽!编译运行后输入想......
  • 对c#和Java的评述
    自C#诞生之日起,关于C#与Java之间的论战便此起彼伏,至今不辍。抛却Microsoft与Sun之间的恩怨与口角,客观地从技术上讲,C#与Java都是对传统面向对象程序设计在组件化软件时代的革......
  • MyEclipse 8.0注册码+原版下载_Java开发软件
    MyEclipse是一个十分优秀的用于开发Java,J2EE的Eclipse插件集合,MyEclipse的功能非常强大,支持也十分广泛,尤其是对各种开元产品的支持十分不错。MyEclipse目前支持JavaServl......
  • 软链接(Symbolic Links) 和硬链接(Hard Links)
    在Linux和UNIX系统中有两种类型的链接,SymbolicLinks和HardLinks,它们都是用ln命令创建的,功能相似但有一些区别。计算机的filesystem存储文件的元数据,如permi......
  • Oracle 分组统计,并显示百分比的实现
    需求:在分组统计的时候,显示每个分组所占的百分比效果图:实现代码:SELECTCOUNT(1)rs,100*round(COUNT(*)/SUM(COUNT(*))OVER(),4)||'%'FROMTB_USERtGROUPBYt.AREA......
  • net中使用HtmlAgilityPack组件采集数据,就是这么简单
    如果要采集网页上的数据,最简单好用的是用Python语言实现,本身就是网络编程语言,有很多组件都可以使用。当然,如果你想用C#进行数据采集,也是没问题的,也有不错的组件可以使用,今......
  • Linux:CentOS release 8.5 安装Mysql5.7
    添加Mysqlyum存储库下载安装软件包#下载软件包wgethttps://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm#安装软件包rpm-Uvhmysql80-commun......
  • he content of element type
    Causedby:org.xml.sax.SAXParseException:Thecontentofelementtype"struts"mustmatch"((package|include|bean|constant)*,unknown-handler-stack?)".atcom.s......
  • org.hibernate.MappingException: No Dialect mapping for JDBC type: -1 解决方法搜
    错误代码:org.hibernate.MappingException:NoDialectmappingforJDBCtype:-1atorg.hibernate.dialect.TypeNames.get(TypeNames.java:79)atorg.hibernate.di......