C# 接口基础学习
什么是接口
接口,在表面上是由几个没有主体代码的方法、属性、索引器、事件,或者它们的组合的集合体,有唯一的名称,可以被类或结构或者其他接口所实现(或者也可以说继承)。它在形式上可能是如下的样子:
interface IBankAccount
{
//方法:存款
void PayIn(decimal amount);
//方法:取款
bool Withdraw(decimal amount);
//属性:账户余额
decimal Balance { get; }
}
接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。举个粗暴的例子,如果你是人,则必须能吃饭。那么吃饭就可以作为接口,但是接口并没有吃饭的具体代码,而人作为一个类,要实现吃饭这个技能,就要实现这个接口,实现接口时,把接口内声明的成员写上具体的代码,然后就可以用这个类的实例或者接口的实例去调用它。
但是问题又来了,人这个类完全可以直接将吃饭作为它的方法成员直接调用,又何必多此一举呢?使用接口也并没有多大的用处嘛,那我们为什么还要使用接口呢?不过你仔细想想,能吃饭的不仅仅有男人,有女人,还有各种生物,他们的吃饭行为是各不相同的啊。它们都是由类封装好了,吃饭也包括在里面,这时候如果你只研究吃饭,也不想管这个类还有什么功能和属性的时候,你会怎么办呢?
你可能会希望把吃饭这个行为从里面抽出来统一管理,并且希望这个行为还得具有一个标准,这样才方便嘛。可是编程的时候要怎么表示呢?我们可以将吃饭这个行为抽象出来,像个类一样,只要实现它,我们就可以知道他们是怎么吃饭了。而这个像类一样的东西就是接口。
知道了什么是接口,让我们看看怎么来使用接口。
怎么使用接口
1.定义接口。使用关键字interface来定义,接口名称一般以I开头。
注意:接口中只能包含方法、属性、索引器和事件的声明。不允许声明成员上的修饰符,即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。如果需要修饰符,最好让实现类来声明。
可以在类外声明,也可以在类内声明。
比如我定义了一个demo接口
interface Idemo
{
void Test();
string str { get; }
}
2.实现接口
实现接口有两种方式,有显式现和隐式实现。
2.1 隐式实现
类和接口都能调用到,我称之为隐式实现。
实现刚刚的接口。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace demo
{
interface Idemo //接口
{
void Test();
string str { get; }
} class Test1 : Idemo //实现接口的类,需要实现接口中的所有成员
{
string s = "hello";
public void Test() //方法
{
Console.WriteLine("this is a demo.");
} public string str //属性
{
get
{
return s;
}
} static void Main(string[] args)
{
/*Test1 test1 = new Test1(); //类调用
34 test1.Test();*/
Idemo demo = new Test1(); //接口调用
demo.Test();
}
}
}
using System;
2.2 显式实现
只有接口才能实现。
继续刚刚的例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace demo
{
interface Idemo
{
void Test();
string str { get; }
} class Test1 : Idemo
{
string s = "hello";
//public void Test()
void Idemo.Test() //不需要修饰符 //实现接口成员时指定接口
{
Console.WriteLine("this is a demo.");
} //public string str
String Idemo.str //指定接口
{
get
{
return s;
}
} static void Main(string[] args)
{
/*Test1 test1 = new Test1();
36 test1.Test();*/
Idemo demo = new Test1(); //接口调用
demo.Test(); }
}
}
using System;
2.3 显示接口实现与隐式接口实现的适应场景
- 当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
- 当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口。
- 隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问。
2.4 接口的继承
接口也可以继承,继承方式与类相同。下面我们定义一个新接口 IDemo来继承Idemo。接着刚刚的例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace demo
{
interface Idemo
{
void Test();
string str { get; }
} interface IDemo : Idemo //继承Idemo所有的成员,新添加一个成员
{
void test();
}
class Test1 : IDemo //实现所有成员
{
string s = "hello";
public void Test()
//void Idemo.Test() //不需要修饰符
{
Console.WriteLine("this is a demo1.");
}
public string str
// String Idemo.str
{
get
{
return s;
}
}
public void test()
{
Console.WriteLine("this is a demo2 ");
} static void Main(string[] args)
{
/*Test1 test1 = new Test1();
test1.Test();*/
//Idemo demo = new Test1();
//demo.Test();
IDemo demo = new Test1();
demo.test();
demo.Test();
}
}
}
using System;
Ending。。。。。有不足之处多多指教。
C# 接口基础学习的更多相关文章
- APP接口基础学习一
PHP面向对象思想 1.客户端发送http请求到达服务器 2.服务器做出响应返回数据(XML,JSON或者其他)到达客户端 XML与JSON 的区别 1.可读性:xml胜出 2.生成数据:json胜出 ...
- C#_接口基础学习
参考:https://www.cnblogs.com/hamburger/p/4681681.html
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- C#/.NET 基础学习
初识C# C#是微软公司发布的面向对象的.运行于.NET Framework之上的高级程序设计语言.与Java有着明显不同,借鉴Delphi的特点,与COM(组件对象模型)直接集成,是微软公司 .NE ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- AspectJ基础学习之三HelloWorld(转载)
AspectJ基础学习之三HelloWorld(转载) 一.创建项目 我们将project命名为:aspectjDemo.然后我们新建2个package:com.aspectj.demo.aspect ...
- AspectJ基础学习之一简介(转载)
AspectJ基础学习之一简介(转载) 一.为什么写这个系列的博客 Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/ ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
随机推荐
- android下的名词/片段解释
关于建项目时候SDK解释 minimum required SDK: 又为miniSdk, 是你程序最低支持的SDK版本,这个现在一般miniSDK设定一般为8或者10 Target SDK:是你程序 ...
- arcgis api for js入门开发系列十一地图统计图
上一篇实现了demo的叠加SHP图层,本篇新增地图统计图,截图如下: 地图统计图实现的思路如下:利用拓展arcgis api的js文件(MapChartGraphic.js以及MapChartGrap ...
- Builder模式详解及其在Android开发中的应用
一.引言 在Android开发中,采用Builder模式的代码随处可见,比如说Android系统对话框AlertDialog的使用或者是Android中的通知栏(Notification)的使用,又比 ...
- mysql 查询缓存配置和查看
Mysql 查询缓存 查询缓存的作用就是当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提高了性能,节省时间. 1.配置查询缓存 修改配置文 ...
- grep[行号&正则匹配字符有颜色]
事情是这样的,昨天在深入学习grep命令时,看到别人博客用grep正则匹配,不仅行数有颜色,而且匹配到的字符也有颜色.我在CRT也试了下,毛颜色都没有.顿时感觉 so low. 解决 编辑vim~/. ...
- Windows10 Enterprise版本周年更新问题
安装Windows10的时候,蛋疼选择了企业版本,导致后来周年更新遇到了蛋疼的问题. 首先是无法接收到周年更新的推送.记得首个周年更新的时候,等了大半年都没有.后来使用了易升进行更新,可以检测到,但是 ...
- linux命令行解刨
linux命令需要在命令行界面上操作(windows的cmd也是一个命令行界面).只有在了解命令行界面含义才能知道我们输入这些命令意义是什么,为什么要输入这些命令. 首先我们要知道怎么找出linux输 ...
- [图形学] 计算机图形学 with OpenGL开篇
<计算机图形学>(第四版)正在学习中,学习目的是为了在Unity中使用shader实现不同的渲染效果. 希望在这里能把学习过程中学到的知识和遇到的问题记录下来. 工作环境是:Xcode 8 ...
- JS运动框架的封装过程(一)
给大家出一道题,从起点A走到目的地B,一共用了1000毫秒,每一次是30毫秒,请问你在这里面得到了哪些信息? 信息有哪些呢? 第一个,总时长是:1000毫秒 第二个,多久时间走一次?30毫秒 第三个, ...
- 移动端Touch事件基础
1.三个常用的移动端事件 ontouchstart 手指按下时触发 ontouchmove 手指移动时触发 ontouchend 手动抬起时触发 注意:这些事件当作事件属性使用时,不兼容谷歌浏览器. ...