C#编程入门与应用Day6

第十一章:类的面对对象编程

封装性

1.面对对象的编程中,大多数情况都是以类作为数据封装的基本单位,封装的类中包含数据和对此数据的操作即算法。

2.类具有清晰的对外接口。

3.类中不想被外部更改的变量通过私有来实现。即封装


继承性

1.C#中只支持单继承,一次只能继承一个类,不能继承多个类,即一个类不能够同时获得多个类的特性。

2.子类继承父类后,并不能拥有父亲的私类成员。子类除了有父类的特性外,还可以有自己的特性。子类可以用自己的方式实现父类的方法即方法重写

3.enum 数据类型,枚举类型

4.耦合性

耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块之间越独立则越差,模块间耦合的高低取决于模块间 接口的复杂性,调用的方式以及传递的信息。
形象的说,就是要将代码写的和电脑一样,主类就是电脑的主机箱,当程序需要实现什么功能的时候只需要在其他的类引入接口,就像电脑上的usb接口。

5.基类可以定义为抽象类,抽象类不能直接实例化,如果要使用抽象类,就必须继承这个类,然后进行实例化操作。另外,继承类时,需要使用冒号加类名,当对一个类应用sealed修饰符修饰时,该修饰符会阻止其他类从该类继承。

6.派生类不仅扩展了基类,并且继承也是可以传递的。例如现在C类继承自B类,B类又继承至A类,则C类继承A类和B类中的所有成员。

7.一个类派生于另一个基类,则其拥有这个基类多有的成员字段和函数。

8.Object类是其他所有类的共同基类,也是唯一的非派生类。

9.隐藏方法,我们不能删除基类中的任何成员,但是可以用与基类成员名称相同的成员来屏蔽基类成员。即基类继承父类中所有方法,可以用隐藏方法来隐藏父类已有方法,定义子类中的特有方法。

pub;ic class Pet//父类
{
Public string name;
public void PrintName();
}

public class Dog:Pet//子类
{
new public void PrintName();//这是定义与父类函数签名相同的方法,这个方法屏蔽了父类中同签名的方法。
}


多态性

1.同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果就是多态。即针对父类的一些成员,子类继承后去重写,从而实现不同的功能

2.编译时多态需要通过重载来完成,重载是指同一个类中有多个名字相同但是但是使用的参数类型、个数或顺序不同。重载是一种编译时的多态

3.运行时的多态,通过override修饰符是指子类对父类中虚方法或抽象方法的覆盖。通过new实现运行时的多态,这种情况称为覆盖,覆盖指不同类中有两个或多个返回类型、方法名、参数都相同而方法体不同的方法。这种覆盖只是表面上的覆盖,被覆盖的父类方法是可以调用到的。

4.重载和重写:重写是父类和子类之间多态性的一种表现,重载是一个类中多态性的表现。

5.基类和派生类

父类即派生类,子类即基类

6.base关键字

用于表示父类,通过它可以访问父类的成员

如果说你父类里面有一个成员比如int  a;那么你子类里面也可以再定义一个int a,
这个时候base.a和this.a表示的就不是一个变量了,如果说子类里面没有,
那么base.a和this.a表示的都是一个变量
还有就是重写,覆盖和构造函数里面调用父类的这个方法。可以用:base(),
还有就是关于形参名和成员变量相同的时候,
因为是就近原则,所以直接写变量名字表示的就是形参,如果加了this表示的就是这个类的成员。
C#里面的this和base 跟JAVA里面的this和super是一样的。
你在定义一个变量的时候有一个this引用,指向自身,还有一个引用base,指向父类。
关于你说的那种情况就是我说的第一种,如果子类成员有和父类成员同名的时候,就必须用this和base区分

7.密封类:sealed

密封了某个类,则其他类不能从该类继承,密封了某个成员,则派生类不能重写该成员的实现。密封类不能作为基类被继承,但是它可以继承别的类或接口。

密封方法:sealed override

当实例方法声明包含sealed修饰符时,称方法为密封方法。并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现。因此声明密封方法时,sealed修饰符总是和override修饰符同时使用。

密封类除了不能被继承之外,其他方面与非密封类的用法大致相同。而密封方法必须通过重写基类中的虚方法进行实现。

8.类中的常用关键字:

base:base和this一样,都是作为类的实例(因此不能调用基类的静态成员和抽象成员)简写或者替代存在的,this用于替代本类的实例,base关键字用于替代基类的实例。

(1)调用基类已经被派生类重写的方法base.方法名()

(2)指定派生类实例时调用基类的构造函数

virtual:修饰方法、属性、索引器或事件声明,声明虚方法和虚属性并使他们可以在派生类中重写。虚拟成员的实现可由派生类中的重写成员更改,而非虚拟成员是无法由派生类进行重写的。

虚方法和抽象方法都可以提供派生类的重写,他们之间的区别:P261

ref和out:C#中通过使用方法来获取方法的返回值时,通常只能得到一个返回值。因此若要一个方法返回多个值的时候,需要借助于ref和out关键字

9.虚方法的一些知识:

重写虚方法必须具有相同的可访问性,且基类方法不能是Private  

不能重写static方法或者非虚方法

方法,属性,事件和索引器都可以声明为virtual。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值