`
yingyingol
  • 浏览: 761565 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
类 、接口、多态、重载
名称 解释 定义 范式
类是一种数据结构;
类是现实对象或关系的模拟(抽象),包含静态属性和动态方法;
类是具有相同或相似结构、操作和约束 规则的对象集合。
声明类 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-nameinterface-name
{
...
}注意:实现接口的方法中不需要使用 override 关键字。
接口抽象类的关系 相似:
①两者都包含可以由子类继承的抽象成员;
②两者都不能直接实例化。
  区别:接口用于定义组件间的行为合同。抽象类用于定义类层次的共同基类。
①抽象类除拥有抽象成员外,还可拥有非抽象成员; 而接口所有成员都是抽象的。
②抽象类的抽象成员可以是私有的,而接口的成员一般都是公有的。
③接口不能包含构造函数、析构函数、静态成员和常量。
④抽象类只支持单继承,即一个子类只能继承一个父类。而一个子类却可以继承多个接口
命名空间 是相关类的逻辑层次结构,便于更好的管理“类”。,类和命名空间的关系,可理解为“文件”和“文件夹”的关系。
分享到:
评论

相关推荐

    C#继承,接口,多态的实现与区别

    在C#编程语言中,继承、接口和多态是面向对象编程的重要概念,它们共同构建了C#类体系的灵活性和可扩展性。下面将详细阐述这三个概念的实现方式、功能以及它们之间的区别。 首先,**继承(Inheritance)**是C#中类...

    C#多态测试C#多态测试C#多态测试

    在这个“C#多态测试”主题中,我们将深入探讨C#中的多态性,包括方法的重载、重写、抽象类和接口,以及虚方法和非虚方法的区别。 一、方法的重载(Overloading) 在C#中,方法的重载是指在同一个作用域内,可以有多...

    C#重写重载与多态

    总结来说,重写、重载和多态是C#中面向对象编程的重要概念。重写允许子类定制继承自基类的方法,重载让我们可以创建多个同名但参数不同的方法,而多态则让我们可以通过父类引用调用子类的特定方法,实现更高效、更...

    C#面向对象编程-多态习题[整理].pdf

    C#面向对象编程-多态习题[整理].pdf

    C#实验 事件、继承和多态

    在C#编程语言中,事件、继承和多态是三个非常关键的概念,它们构成了面向对象编程的核心要素。在这个实验中,我们将深入理解这三个概念,并通过实际的编程实践来加深印象。 首先,我们来探讨事件(Event)。事件是...

    c#多态,接口等概念和方法

    在C#编程语言中,多态性(Polymorphism)、接口(Interface)和线程(Thread)是核心的面向对象编程概念,对于初学者来说,理解并熟练掌握这些概念至关重要。下面将对这些主题进行详细阐述。 **多态性**...

    c#多态 完全 通 源码

    在这个"完全通源码"的压缩包中,我们可以期待看到关于C#多态的实例和源代码,帮助我们深入理解和运用这个概念。 1. **多态的定义**:多态意味着“多种形态”。在C#中,多态主要体现在方法的重载(Overloading)和...

    C#课件教案PPT继承和多态共17页.pdf.zip

    在C#中,多态分为编译时多态(方法重载)和运行时多态(方法重写)。编译时多态是指在编译期间确定哪个方法将被调用,通常是通过参数列表的不同来实现。运行时多态则是通过虚方法和接口实现,它使得父类引用可以指向...

    c#中应用多态的计算器

    在C#中,多态可以通过方法重载、方法重写(Override)以及抽象类和接口来实现。在这个计算器的例子中,可能会定义一个基类`Calculator`,它提供了一些基本的计算方法,如加法、减法、乘法和除法。这些方法可能是抽象...

    C#课堂案例(多态)

    本堂课我们将聚焦于“多态”这一核心概念,多态是面向对象编程的三大特性(封装、继承、多态)之一,对于理解和编写高效、灵活的代码至关重要。 标题中的“C#课堂案例(多态)”暗示了我们将通过具体的实例来探讨C#中...

    C#控制台应用程序(封装,继承,多态)

    在C#编程语言中,控制台应用程序是学习和实践编程概念的理想平台,特别是对于封装、继承和多态这些面向对象编程的基本原则。本项目旨在通过一个实际的控制台应用实例,帮助开发者深入理解这些概念。 封装是面向对象...

    一个经典c#多态的范例

    在这个"经典C#多态的范例"中,我们可能看到一个基类(Base Class)定义了至少一个虚方法,然后由一个或多个派生类(Derived Classes)继承这个基类并重写了该虚方法。例如,基类可以定义一个名为`Talk()`的方法,...

    多态继承接口结构例子

    在C#编程语言中,多态(Polymorphism)、继承(Inheritance)和接口(Interface)是面向对象编程的三大核心特性。结构(Struct)则是C#中的一个基本类型,与类(Class)有所不同。本篇文章将深入探讨这些概念,并...

    C#用对象思考:多态

    在C#中,多态主要通过方法重载(Method Overloading)、方法重写(Method Overriding)和抽象类与接口来实现。 1. **方法重载**:在同一作用域内,允许定义多个同名但参数列表不同的方法。这是编译时的多态,因为...

    11-面向对象-第3天(接口多态)-讲义共6页.pdf.z

    在Java、C#等语言中,接口通常用作类间通信的标准,确保类间的互操作性。例如,一个名为`Animal`的接口可能包含`eat()`和`sleep()`方法,而多个类如`Dog`和`Cat`可以实现这个接口,提供各自的具体实现。 其次,多态...

    C#接口,多态,继承的关系

    在编程领域,C#是一种广泛使用的面向对象的编程语言,其强大的特性之一就是支持接口(Interface)、多态(Polymorphism)和继承(Inheritance)。这三者是面向对象编程的核心概念,也是C#中构建可扩展、灵活和模块化...

    C#多态.doc

    【C#多态】 C#中的多态性是面向对象编程的一个核心概念,它允许不同类型的对象对同一操作做出不同的响应。多态性分为编译时的多态性和运行时的多态性。 1. 编译时的多态性: 编译时的多态性是通过函数重载来实现...

    VS2010 C# 多态实例

    4. 使用接口:除了继承外,C#还支持接口(Interface),接口是一种完全抽象的类型,可以实现多态。通过实现相同的接口,不同类可以提供相同的方法签名,实现多态调用。 5. 泛型与多态:C#的泛型也是实现多态的一种...

    Visual C# 2005开发技术PDF,抽象类、多态及接口,处理异常和错误,XML编程,非常好的教程.

    在这个PDF教程中,读者将深入理解C# 2005的核心概念,包括抽象类、多态、接口、异常处理和XML编程。 首先,让我们来探讨抽象类。在面向对象编程中,抽象类是一种不能被实例化的特殊类,它为其他类提供了一个共享的...

    C#语言继承多态

    在C#中,多态可以通过方法重载、方法覆盖、接口实现和抽象类等方式来体现。 - **方法重载**:在同一类中,方法名相同但参数列表不同。 - **方法覆盖**:子类重写父类的虚方法或抽象方法,提供具体实现。 - **接口...

Global site tag (gtag.js) - Google Analytics