1、定义和实现接口:接口名称通常上以字母 I 开头

  例子:定义IBankAccount接口

 namespace Test.YinXi{
public interface IBankAccount{
void PayIn(decimal amount);
bool Withdraw(decimal amount);
decimal Balance{
get;
}
}
}

  下面是一个实现了 IBankAccount 接口的类

 namespace Test.Yinxi.Bank{
public class SaverAccount:IBankAccount{
private decimal balance;
public void PayIn(decimal amount){
balance+=amount;
}
public bool Withdraw(decimal amount){
if(balance>=amount){
balance-=amount;
return true;
}
Console.WriteLine("Withdrawal attempt failed.");
return false;
}
public decimal Balance{
get{
return balance;
}
}
public override string ToString(){
return String.Format("Bank Saver: Balance={0,6:C}",balance);
}
}
}

  SaverAccount 派生自IBankAccount ,表示它获得了IBankAccount 的所有成员,但接口实际上并不实现其方法,所以SaverAccount必须提供这些方法的所有实现代码。如果缺少实现代码,编译器就会产生错误。接口仅表示其成员的存在性,类负责确定这些成员是虚拟的还是抽象的(但只有在类本身是抽象的,这些函数才能是抽象的)

  在本例中,接口的任何函数不必是虚拟的。

  接下来是一个测试代码:用来测试上面写的实现的接口

  

 using System;
using Test.YinXi;
using Test.YinXi.Bank; namespace Test.Yinxi
{
class MainEntryPoint
{
public static void Main(string[] args)
{
IBankAccount bank=new SaverAccount();
bank.PayIn();
bank.Withdraw();
Console.WriteLine(bank.ToString());
}
}
}

2、派生的接口

  接口可以彼此继承,其方式与类的继承方式相同。下面是定义一个新的接口 ITransferBankAccount 继承 IBankAccount

  

 namespace Test.YinXi
{
public interface ITransferBankAccount :IBankAccount
{
bool TransferTo(IBankAccount destination,decimal amount);
}
}

  因为ITranssferBankAccount 派生自 IBankAccount ,所以它拥有IBank'Account 的所有成员和它自己的成员。这表示实现(派生自)ITransferBankAccount 的任何类都必须实现IBankAccount 的所有方法和在ITransferBankAccount 中定义的新方法 TransferTo()。

C#高级编程笔记 Day 4, 2016年9月 12日(接口)的更多相关文章

  1. 2016年11月12日 星期六 --出埃及记 Exodus 20:3

    2016年11月12日 星期六 --出埃及记 Exodus 20:3 "You shall have no other gods before me.除了我以外,你不可有别的 神.

  2. 2016年10月12日 星期三 --出埃及记 Exodus 18:23

    2016年10月12日 星期三 --出埃及记 Exodus 18:23 If you do this and God so commands, you will be able to stand th ...

  3. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  4. 2016年3月12日Android学习笔记

    1. //此句不能忘,否则onFling左右滑动不起作用 mLlExamView.setLongClickable(true); mLlExamView.setOnTouchListener(new ...

  5. 2016年10月12日--string、Math类、Random随机数、DateTime、异常保护

    string string.length; //得到string长度 string.Trim(); //去掉string前后的空格 string.TrimStart(); //去掉string前的空格 ...

  6. 2016年2月16日开始,每天一篇,记录学习心得,【基本技能篇】>>开篇《如何阅读一本书——心得》

    如何阅读一本书——心得 ——2016年2月12日 要达到阅读的所有目的,就必须在阅读不同书籍的时候,运用适当的不同速度.读的太快或太慢,都一无所获. 四个阅读层次:①基础阅读,具有基本阅读的能力,包括 ...

  7. Android高级编程笔记(四)深入探讨Activity(转)

    在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...

  8. 我的Python成长之路---第八天---Python基础(24)---2016年3月5日(晴)

    多线程编程 什么是多线程,线程是操作系统能够进行运算调度的最小单位.他包含在进程之中,是进程中的实际运作单位.线程是进程中一个单顺序的空值六,一个进程可以并发多个线程,每个线程可以并行处理不同的任务. ...

  9. 我的Python成长之路---第七天---Python基础(22)---2016年2月27日(晴)

    socket网络编程 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. ...

随机推荐

  1. [No000042]CSS 之 平时那些你不敢用的字体

    CSS 之 平时那些你不敢用的字体 网上找找,无非如下一些中规中矩的结果: Windows下建议字体: 字体名称 对应英文 宋体 SimSun 黑体 SimHei 微软雅黑 Microsoft YaH ...

  2. .jshintrc配置

    在root目录创建一个.jshintrc文件插入下面的代码即可.也可以自行配置. { // // 强制选项 // // When set to true, these options will mak ...

  3. jquery富文本在线编辑器UEditor

    UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码. UEditor的功能非常强大,官方 ...

  4. CSS选定第k个元素

    <!DOCTYPE html> <html> <head> <title></title> <style type="tex ...

  5. [转]extjs render 用法介绍

    renderer可以格式化该列显示的数据格式或者按照你自定义的脚本显示最终数据样子,个人是这么理解,如果你不是可以看下本文 复制代码 代码如下: var cm = new Ext.grid.Colum ...

  6. vim2

    一.光标控制命令   命令                   移动    k                   向上移一行    j                   向下移一行    h    ...

  7. LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)

    1.准备工作: 1)把所有的软件安装在/Data/apps/,源码包放在/Data/tgz/,数据放在/Data/data,日志文件放在/Data/logs,项目放在/Data/webapps, mk ...

  8. wpf converter converterparameter 绑定多参数

    1. converterparameter不是依赖属性,所以不能用binding. 2. 可以把converter 的接口 IValueConverter改为 IMultiValueConverter ...

  9. J2EE web项目中解决所有路径问题

    Java中使用的路径,分为两种:绝对路径和相对路径.归根结底,Java本质上只能使用绝对路径来寻找资源.所有的相对路径寻找资源的方法,都不过是一些便利方法.不过是API在底层帮助我们构建了绝对路径,从 ...

  10. JAVA教师:给JAVA初学者的忠告

    我带过不少JAVA,C++班的课,来学习的同学很多都是初学者,一部分是急着找工作的,一部分是很感兴趣的.他们都想在短短一两个星期内掌握Java,这是不切实际的.而且这样做很容易让自己心浮气燥,难以静下 ...