一:抽象方法

1. 在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法。抽象方法一般存在于抽象类或接口中。

在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类还必须具备此方法,因此,把这样的方法定义为抽象方法。

2. 声明方法:public abstract Eat(); 方法声明只是以一个分号结束,并且在签名后没有大括号,没有函数体,因为太抽象不清楚,具体的实现由各个子类中重写函数实现。

3. 它的特点:

(1) 抽象方法是隐式的 virtual 方法。

(2) 只允许在抽象类中使用抽象方法声明。

(3) 因为抽象方法只声明不提供实实现,所以没有方法体。抽象方法只在派生类中真正实现,这表明抽象方法只存放函数原型(方法的返回类型,使用的名称及参数),而不涉及主体代码。

(4) 加abstract关键词。

(5)抽象方法的目的在于指定派生类必须实现与这一方法关联的行为。

二:抽象类

1. 抽象类:无法被实例化的类。关键词是abstract,凡是带有abstract关键词的类都无法被new出来。抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

2. 声明:抽象类声明:public abstract class Ren{};

3. 注意:

(1)凡是带有抽象方法的类肯定是抽象类;抽象类却不一定包含抽象方法。

(2)构造方法,静态成员方法不能声明为抽象方法。

(3)一个非抽象类必须实现从父类继承来的所有抽象方法,如果有一个抽象方法没有实现,则此类必须要加abstract关键字。如果父类被声明为抽象类,并存在未实现的抽象方法,那么子类就必须实现父类中所有的abstract成员,除非该类也是抽象的。

4. 特征:

(1)抽象类不能实例化。

(2)一个抽象类可以同时包含抽象方法和非抽象方法。

(3)不能用sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的,采用sealed修饰符的类无法继承,而abstract修饰符要求对类进行继承。

(4)从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实际实现。

例子:Ren类中有一个抽象方法Eat(),在其派生类Chinese和American中必须重写这个方法

abstract class Ren
{
protected string name;
public abstract void Eat();
} class Chinese:Ren
{
public override void Eat()
{
Console.WriteLine("用筷子吃饭");
}
}
class American : Ren
{
public override void Eat()
{
Console.WriteLine("用刀叉吃饭");
}
}

三:接口

1. 关键字:interface,用interface 关键词来定义。

2. 概念:极度抽象的类,无成员变量,无实例属性和实例方法,只有抽象方法或抽象属性,生活中的例子:标准,规则。

3. 写法:接口不用class,用interface,名字一般以I作为首字母;不用写abstract,里面所有都是,不用写public,必须是public。

    interface IUSB         //接口
{
void start();
void stop();
}

4. 特点:

(1)接口中的方法都是抽象的,因此无需加abstract修饰符。

(2)接口中的方法都是公用的,因此无需加public修饰符。

(3)接口就是一个规则标准。

(4)接口可以继承父接口。

(5)一个类可以实现(继承)多个接口。一个类只能有一个父类,但可以实现多个接口。

例子:简单的IUSB接口,里面有两个抽象方法start()和stop(),派生类实现接口必须实现接口中的所有方法。

 interface IUSB         //接口
{
void start();
void stop();
}
class UDisk : IUSB //实现接口必须实现里面的所有方法
{
public void start()
{
Console.WriteLine("U盘启动了");
}
public void stop()
{
Console.WriteLine("U盘停止了");
}
}
class Cammer : IUSB
{ public void start()
{
Console.WriteLine("摄像头启动了");
} public void stop()
{
Console.WriteLine("摄像头关闭了");
}
} class computer
{
public void CheckUSB(IUSB usb)
{
usb.start();
}
public void CloseUSB(IUSB usb)
{
usb.stop();
}
}

用的时候:

       computer c = new computer();
UDisk u = new UDisk();
Cammer m = new Cammer(); c.CheckUSB(u); //插入U盘
c.CheckUSB(m); //插入摄像头 c.CloseUSB(u); //拔出U盘
c.CloseUSB(m); //插入摄像头

四:命名空间

1. 概念:namespace 相当于一个包,它是对类进行分类管理的工具,给计算机看的,相同命名空间下的类可以分在不同的文件中存储。

2. 一般写法:namespace 公司名.项目名.模块名

3. 在别的命名空间上面要使用其它命名空间内的类,可以在它的上面写 using 要使用的命名空间;

五:项目名

一般默认:ConsoleApplication1,用来给人类标识出这个项目是做什么的,给人看的。

六:程序集

在项目名上打右键:属性,即可修改程序集名称

编译出来的exe或dll文件就是程序集。exe是控制台应用程序,dll是库类。

程序集的名字就是编译出来的exe或dll名字。

如果一个项目分三个人来写,A写一个类库,B写一个类库,C写Main函数,把他们整合在一起的流程是:

1. A写完了编译出一个名字如 cc.dll 的文件;

2. B写的时候要用到A命名空间中的某个类,B先将A的cc.dll文件拷贝到自己的目录下,B需要在项目中的引用上打右键:添加引用,通过浏览找到该引用添加进来,然后using A 的命名空间;

3. B写完了编译出一个名字如 dd.dll 的文件;

4. C要写Main函数,在Main函数中操作AB中的类,他需要将AB的dll文件拷贝过来,然后再项目中的引用上打右键,添加引用,通过浏览找到该引用添加进来,然后using A 的命名空间; using B的命名空间,这样就可以在Main函数中用了。

5. 如果A的命名空间中有个类Ren和B的命名空间中有个类Ren重名了,这C在用的时候要用哪一个命名空间下的Ren类就要用该命名空间点出来再用。

C#面向对象(二)的更多相关文章

  1. 2. 星际争霸之php面向对象(二)

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. Javascript面向对象二

    Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...

  3. python面向对象二

    1.1类的静态属性,类方法,类的静态方法 1.1.1静态属性(@property) 在类中: python内置的@property装饰器就是负责把一个方法(函数)变成属性来调用. class Stud ...

  4. canvas学习和面向对象(二)

    Canvas 学习(二) 上一篇Canvas 学习(一)中我是用canvas绘制了一些基本和组合的图形. 现在开始绘制图片和动画帧,以及面向对象的升级版本. 还是一样,看代码,所有的代码都托管在git ...

  5. JavaScript 面向对象(二) —— 案例篇

    看案例前可以先看看基础篇:JavaScript 面向对象(一) —— 基础篇 案例——面向对象的选项卡:把面向过程的程序一步步改成面向对象的形式,使其能够更加的通用(但是通用的东西,一般会比较臃肿). ...

  6. JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

      前  言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...

  7. 第八章:Python基础の面向对象(二)

    本課主題 面向对象的多态 面向对象的成员 成员修饰符 特殊成员 面向对象其他应用 异常处理 设计模式与单例模式 面向对象的多态 指定参数类型只是多态的一种表现 另外一种是允许自己类型和自己的子类型(典 ...

  8. Python之面向对象二

    面向对象的三大特性: 继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 c ...

  9. Python自动化开发 - 面向对象(二)

    本节内容 1.isinstance(obj,cls)和issubclass(sub,super) 2.反射 3.__setattr__,__delattr__,__getattr__ 一. isins ...

  10. python 面向对象二 类和实例

    一.类和实例 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法, ...

随机推荐

  1. MySQL show status详解

    http://www.sandzhang.com/blog/2010/04/07/mysql-show-status-explained-detail/ 要查看MySQL运行状态,要优化MySQL运行 ...

  2. asp.net Context.User.Identity.Name说明

    今天做了一个身份验证页面,基本实现功能,却不能显示当前用户姓名,自己MSDN半天一无所获,问题就在Context.User.Identity.Name:Context是HttpContext类,Use ...

  3. WordPress Events Manager插件多个跨站脚本漏洞

    漏洞名称: WordPress Events Manager插件多个跨站脚本漏洞 CNNVD编号: CNNVD-201310-196 发布时间: 2013-10-15 更新时间: 2013-10-15 ...

  4. cocos2d-x学习笔记1——Cocos2D-x 中的核心类

    Cocos2D-x 引擎的设计思路是将游戏的各个部分抽象成几个概念,包括导演.场景.布景层和人物精灵,它们之间的关系如图3-1 所示: 导演(CCDirector): 顾名思义,导演类是游戏中的组织者 ...

  5. ARM学习笔记3——数据处理指令

    一.数据处理指令概述 1.概念 数据处理指令是指对存放在寄存器中的数据进行处理的指令.主要包括算术指令.逻辑指令.比较与测试指令以及乘法指令 如果在数据处理指令前使用S前缀,指令的执行结果将会影响CP ...

  6. JSP控制select不可再选择

    首先分析下disable ,display和readonly: 1,Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效 ...

  7. AIX topas命令详解

    本文转载于:AIX topas命令详解 topas命令默认2秒更新一次 一.topas命令以区域形式表现系统各项指标性能,如下图: 1. CPU:反应CPU性能区域,如果有多个 CPU,按 c 键两次 ...

  8. MISCONF Redis is configured to save RDB snapshots

    今天客户突然反馈用我们的api出现了下面的这个错误 MISCONF Redis is configured to save RDB snapshots, but is currently not ab ...

  9. centos防火墙操作

    centos防火墙基本操作 #/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT#/sbin/iptables -I INPUT -p tcp -- ...

  10. mac下教你如何开源项目托管GitHub

    自从google code关闭了下载服务了之后,GitHub作为了目前最好用的免费开源项目托管站点,众多开源项目都托管在github,其中不乏著名的播放器MPC-HC. 这里教大家如何把代码库上传到G ...