C#.NET面向对象(语法点)
一.继承
C#中继承的规则
1:继承是可传递的 A:B B:C
2:派生类应当是对基类的扩展。派生类可以添加新的成员,但不能除去已经继承的成员的定义。
3:构造函数和析构函数不能被继承
4:如果派生类定义了与基类成员同名的新成员,就可以重载或覆盖基类的成员
5:类可以定义虚方法、虚属性以及虚索引器,它的派生类能够重载这些成员,从而实现类可以展示出多态性。另外,类也可以定义静态方法、静态属性和静态索引器。
6:派生类只能从一个类中继承,可以通过接口实现多重继承
Base 关键字=》
1 在派生类中使用 base.方法名 调用基类的方法
2 也可以在派生类的构造函数处 使用 public 派生类名(params):base(params){;;}调用基类的构造函数
二 多态
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类重载基类中的虚函数型方法来实现
(1)编译时的多态性:编译时的多态性通过重载来实现。
(2)运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中,运行时的多态通过虚成员实现。
1、虚方法的重载
在类的方法前加上关键字virtual,则该方法被称为虚方法。通过对虚方法的重载,实现在程序运行过程中确定调用的方法。需要注意的是这里所讲的重载与前面所讲的通过参数类型与参数个数的不同实现重载是不同的。
虚方法的重载实例1:
using System; using System.Collections; namespace 笔记 { class A { public void F() { Console.WriteLine("A.F"); } public virtual void G() { Console.WriteLine("A.G"); } } class B : A { new public void F() { Console.WriteLine("B.F"); }//对基类同名方法覆盖 public override void G() { Console.WriteLine("B.G"); }//重载 } public class Test { public static void MMain() { B b = new B(); A a = b; a.F(); b.F(); a.G(); b.G(); } } }
程序运行结果:
A.F
B.F
B.G
B.G
在A在定义了提供了非虚方法F和虚方法G,派生类B则对方法F实现覆盖,对虚方法G实现了虚方法的重载。“A a=b”实际上a仍旧是一个b对象。
2、抽象类与抽象方法
抽象类是一种特殊的基类,它不能被实例化,只能作为基类,由其他类继承。抽象类的定义使用关键字abstract。如将Spahe类定义为抽象类:
public abstract class Shape
{
…
}
在抽象类中也可以使用关键字abstract定义抽象方法,要求所有的派生非抽象类都要重载实现抽象方法。引入抽象方法的原因在于抽象类本身是一种抽象的概念,有的方法并不要具体的实现,而是留下来让派生类来重载实现。
Shape类中的GetArea方法本身没什么具体的意义,而只有用于派生类Circle类和Rectangular才可以计算具体的面积。
抽象方法定义为:public abstract double GetArea();
则派生类重写实现为:public override double GetArea() { … }
C#.NET面向对象(语法点)的更多相关文章
- iOS - OC 面向对象语法
1.类 1)根类:因为类 NSObject 是层次结构的最顶层,因此称为根类. 可以将类称为子类(subclass)和父类(superclass),也可以将类称为子类和超类. 2)分类/类别(cate ...
- iOS - Swift 面向对象语法
1.面向对象 面向过程:面向过程编成将所要解决的问题按解决问题的步骤进行分析.如果是大问题,就分解成为多个不同的小问题,在程序里叫做划分成不同的模块.每一个解决的步骤可能是一行或者几行代码,也可能是一 ...
- OC中的面向对象语法
一. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 打开电脑 播放电 ...
- 《Java从入门到放弃》JavaSE入门篇:面向对象语法二(入门版)
想了半天,发现单独的封装和多态没什么好讲的,我们就简单说说Java里面对应的语法吧. 相关内容如下: 一.访问修饰符 二.getter/setter方法 三.构造方法 四.super和this 五.s ...
- OC中的面向对象语法4
一. 继承 1. 继承的基本用法 l 设计两个类Bird.Dog // Bird的声明 @interface Bird : NSObject { @public int weight; } - (vo ...
- OC中的面向对象语法3
一. set方法和get方法 1. set方法和get方法的使用场合 @public的成员可以被随意赋值,应该使用set方法和get方法来管理成员的访问(类似机场的安检.水龙头过滤,过滤掉不合理的东西 ...
- 【转】javascript面向对象编程
摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...
- 黑马程序员_ Objective-c 概述及面向对象与三大特性
-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ (一).语法概述 1. oc介绍:(.m文件) 1> c语言的基础上,增加 ...
- js面向对象(构造函数与继承)
深入解读JavaScript面向对象编程实践 Mar 9, 2016 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化.多态.和封装几种技术. 对JavaScript而言,其 ...
随机推荐
- javascript 切换动画
function startMove(obj, json, fn) { clearInterval(obj.timer); obj.timer = setInterval(function() { v ...
- Adapter常用的实现--BaseAdapter
BaseAdapter,通常用于被拓展.拓展BaseAdapter可以对个列表项进行最大限度的定制. 如下面的Badapter继承自BaseAdapter,重写以下四种方法. public clas ...
- No.1_1 java语言基础_学习笔记
import java.util.Scanner; public class HelloWorld { static final double PI=3.14; static int x=125; / ...
- 【solr基础教程之二】索引
一.向Solr提交索引的方式 1.使用post.jar进行索引 (1)创建文档xml文件 <add> <doc> <field name="id"&g ...
- 在word中使用notepad++实现代码的语法高亮
转载自:http://blog.csdn.net/woohello/article/details/7621651 有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩 ...
- 第二章IPC——IPC与开启多进程
问题 一.IPC ①.什么是IPC ②.为什么要有IPC 二.多进程 ①.如何开启多进程 ②.系统如何创建多进程 三.多进程引发的问题 问:私有进程(利用":+进程名")能否共 ...
- Super Jumping! Jumping! Jumping!(hdu 1087 LIS变形)
Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- iOS Plist NSUserDefaults 数据存储
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- python----特性002
python特性002:特性是可继承的 #!/usr/local/python3.5/bin/python3 class Person(object): def __init__(self,name) ...
- Asp.Net MVC+EF+三层架构的完整搭建过程
架构图: 使用的数据库: 一张公司的员工信息表,测试数据 解决方案项目设计: 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) ...