C#面向对象的三大特性

 一,封装:

我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以程序员为例,一个程序员就肯定是一个对象了。
那么封装是什么呢?
程序员封装一个人类,程序员把开发工具都安装在电脑上,所需要的技术也都装在了自己的脑子里了。这个有什么好处呢?好处就是一个程序员完成这个类就可以了。至于他是先干什么后干什么我不干涉,这有助于他更快更好的干好这件事情,我自己也省事。

书面的解释如下:
在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

public:所有对象都可以访问;
private:对象本身在对象内部可以访问;
protected:只有该类对象及其子类对象可以访问
internal:同一个程序集的对象可以访问;
protected internal:访问限于当前程序集或派生自包含类的类型。

在这里插入图片描述

 二,继承:

还以为程序员为例,我们每个程序员都会有一些共同的特征,都要做一些相同的事情。比如:程序员都要用到电脑,键盘,鼠标等等 这是共同的特征。都要吃饭,喝水,这是都要做的相同的事情。那么如果我们现在要声明很多个程序员,每个程序员都会有这些特征,那我不是要写很多重复的代码?所以我们可以先建一个程序员的父类,这个父类不代表一个具体的程序员,只是一个拥有人所有共同特性的虚拟的程序员。下次我们要实例化一个具体的程序员的时候,只需要将这个程序员继承上面这个“虚拟的程序员”,那么他就拥有了程序员的所有共同特性。这样,这些重复的代码我们就可以不写了。

书面解析:继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。

在这里插入图片描述

三,多态:

有多态之前必须要有继承,只有多个类同时继承了同一个类,才有多态这样的说法。

还是以 程序员为例子,程序员都要做“吃饭”这样一个相同的事情。“吃饭”这个事情,体现到类中就是方法了。因为是 程序员都是要做的,所以我们在“虚拟的 程序员”中写好了这个方法,但每个 程序员都有不同的吃饭方法,有用筷的也有用叉的,有要吃米饭的也有要吃面食的。所以如果我们要描述不同 程序员的吃饭的过程,就要把这个过程放到具体的子类中去了,因为每个 程序员都不一样嘛。同样一个方法,子类都有不同的实现方式,这个就是多态了,多态有助于程序的灵活性。

在继承关系的前提下,实例化出不同的对象,这些对象调用相同的方法,但是却表现出不同的行为,这就叫做多态。

在 C#语言中体现多态有三种方式:虚方法,抽象类, 接口。

1、虚方法
1.1什么是虚方法?

在父类中使用 virtual 关键字修饰的方法, 就是虚方法。在子类中可以使用 override 关键字对该虚方法进行重写。

1.虚方法必须使用virtual修饰

2.虚方法同抽象方法(adstract)一样使用override关键字重写

3.虚方法在子类中可以实现,也可以不实现。

4.虚方法必须有方法体哪怕是空的

5.虚方法不能使用sealed修饰,否则不能重写。

6.virtual 修饰符不能与 static、abstract``private 或 override 修饰符一起使用。
1.2虚方法语法

父类:

public virtual 返回值类型 方法名()

{

方法体代码;

}

子类:

public override 返回值类型 方法名()

{

方法体代码;

}

amimal Demo For Example :
在这里插入图片描述
抽象类

抽象类不能实例化。

抽象类可能包含抽象方法和访问器。

无法使用 sealed 修饰符来修改抽象类,因为两个修饰符的含义相反。 sealed 修饰符阻止类被继承,而 abstract 修饰符要求类被继承。

派生自抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实际实现。

在方法或属性声明中使用 abstract 修饰符,以指示该方法或属性不包含实现。

抽象方法具有以下功能:
抽象方法是隐式的虚拟方法。

只有抽象类中才允许抽象方法声明。

由于抽象方法声明不提供实际的实现,因此没有方法主体;方法声明仅以分号结尾,且签名后没有大括号 ({ })。 例如:
C#
public abstract void MyMethod();
实现由方法 override 提供,它是非抽象类的成员。
在抽象方法声明中使用 static 或 virtual 修饰符是错误的。

除了声明和调用语法方面不同外,抽象属性的行为与抽象方法相似。

在静态属性上使用 abstract 修饰符是错误的。

通过包含使用 override 修饰符的属性声明,可在派生类中重写抽象继承属性。

有关抽象类的详细信息,请参阅抽象类、密封类及类成员。

抽象类必须为所有接口成员提供实现。

在这里插入图片描述

virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。

1.virtual修饰的方法必须有实现(哪怕是仅仅添加一对大括号),而abstract修饰的方法一定不能实现。
2.virtual可以被子类重写,而abstract必须被子类重写。
3.如果类成员被abstract修饰,则该类前必须添加abstract,因为只有抽象类才可以有抽象方法。
4.无法创建abstract类的实例,只能被继承无法实例化。

 四.接口

什么是接口(interface)
由于 C#中不能实现多继承,一个子类只能有一个父类,所有C#给我们提供了接口。

接口的定义是指定一组函数成员而不实现成员的引用类型,其它类型和接口可以继承接口。定义还是很好理解的,但是没有反映特点,接口主要有以下特点:

(1)通过接口可以实现多重继承,C# 接口的成员不能有 public、protected、internal、private 等修饰符。原因很简单,接口里面的方法都需要由外面接口实现去实现方法体,那么其修饰符必然是 public。C# 接口中的成员默认是 public 的,java 中是可以加 public 的。
(2)接口成员不能有 new、static、abstract、override、virtual 修饰符。有一点要注意,当一个接口实现一个接口,这2个接口中有相同的方法时,可用 new 关键字隐藏父接口中的方法。
(3)接口中只包含成员的签名,接口没有构造函数,所有不能直接使用 new 对接口进行实例化。接口中只能包含方法、属性、事件和索引的组合。接口一旦被实现,实现类必须实现接口中的所有成员,除非实现类本身是抽象类。
(4)C# 是单继承,接口是解决 C# 里面类可以同时继承多个基类的问题。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值