C# 接口使用方法
之前一直不理解接口这一概念,今天无意中翻书,网上查资料悟道其中的道理,现在工作没有用到interface这一块,怕以后会遇到忘记实现的方法便记录下来,哪里写的不对希望读者指出,话不多说,接下来看我对接口的理解。
1.接口说明:
接口为不同应用的实现提供了一中规范和约束,只要每个应用都遵守这种规范和约束,整个系统就可以得到有效的组织,从而为应用系统的低代价开发提供有效的途径。
接口用于描述一组类的公共方法/公共属性. 它不实现任何的方法或属性,只是告诉继承它的类《至少》要实现哪些功能,继承它的类可以增加自己的方法。
2.接口声明:
interface ISample
{
void f(int x); //方法
int att { get; set; } //属性(可读,可写)
event EventHandler OnDraw; //事件
string this[int index] { get; set; } //索引器
}
3.接口使用注意事项:
.接口可以继承。 .类要继承接口的所有东西 .接口不能继承类 .一个类可以继承多个接口 .接口的修饰符可以是 new、public、protected、internal、private .接口成员前面不允许有修饰符,都默认为公有成员(public) .接口成员可以分为4类:方法、属性、事件、索引器,而不能包含成员变量
4.实例
public class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Cay(); Cat cat = new Cat();
cat.Cay(); Pig pig = new Pig();
pig.Cay(); Console.Read();
}
}
class Dog : Animal //定义狗的类
{
public void Cay() //输出狗叫声的方法
{
Console.WriteLine("汪汪汪");
}
}
class Cat : Animal //定义猫的类
{
public void Cay() //输出猫叫声的方法
{
Console.WriteLine("喵喵喵");
}
}
class Pig : Animal //定义猪的类
{
public void Cay() //输出猪叫声的方法
{
Console.WriteLine("哼哼哼");
}
} interface Animal //动物接口
{
void Cay(); //叫声的方式
}
输出的结果:
这样一看,如果想要调用Cay()方法,在Dog,Cat,Pig中直接定义不就好了,何必多次一举?
那么我们修改一下代码,再定义一个类Class,这个Class作为实现接口传入,这个类不需要继承于接口Animal:
public class Program
{
static void Main(string[] args)
{
Class c = new Class();
Animal animal; animal = new Dog();
c.WriteCay(animal); animal = new Cat();
c.WriteCay(animal); animal = new Pig();
c.WriteCay(animal); Console.Read();
}
}
class Dog : Animal //定义狗的类
{
public void Cay() //输出狗叫声的方法
{
Console.WriteLine("汪汪汪");
}
}
class Cat : Animal //定义猫的类
{
public void Cay() //输出猫叫声的方法
{
Console.WriteLine("喵喵喵");
}
}
class Pig : Animal //定义猪的类
{
public void Cay() //输出猪叫声的方法
{
Console.WriteLine("哼哼哼");
}
}
class Class
{
public void WriteCay(Animal animal)
{
animal.Cay();
Console.WriteLine("--------------------------");
}
}
interface Animal //动物接口
{
void Cay(); //叫声的方式
}
此时的函数的结果是:
如果再来一个Monkey,Cattle,Sheep这样的类添加进来,也只需要把他们的相关类加进来,然后在Main()中稍作修改就好,扩充性特别好。
C# 接口使用方法的更多相关文章
- 为什么类和接口不能使用private和protected?接口的方法不能使用private、protected、default
对于java程序员来说,java的访问权限修饰词public.protected.default.private的区别和使用肯定都不是问题,这里也不再啰嗦了,反正度娘一搜就一大把.最近在整理java ...
- java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)
interface接口参数 jdk1.7及以前使用spring功能实现的: 注意: 1.该功能只能获取类的方法的参数名,不能获取接口的方法的参数名. public static void test() ...
- java 28 - 7 JDK8的新特性 之 接口可以使用方法
JDK8的新特性: http://bbs.itcast.cn/thread-24398-1-1.html 其中之一:接口可以使用方法 interface Inter { //抽象方法 public a ...
- Spring自定义一个拦截器类SomeInterceptor,实现HandlerInterceptor接口及其方法的实例
利用Spring的拦截器可以在处理器Controller方法执行前和后增加逻辑代码,了解拦截器中preHandle.postHandle和afterCompletion方法执行时机. 自定义一个拦截器 ...
- PreparedStatement接口及其方法的使用
PreparedStatement接口是Statement接口的子接口,使用它的好处有三个 一:简化代码,便于sql语句的书写 二:有效的禁止sql语句的注入,例如:用户名和密码,使用Prepared ...
- XMLHttpRequest 2.0与FileReader接口的方法
jsonpd的实现: var jsonp = function (options) { var url = options.url, params = options.params || {}, ca ...
- as3.0 interface接口使用方法
[转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...
- java接口的方法默认都是public abstract类型
java接口的方法默认都是public abstract类型, 因此我们在编写接口的实现类的时候,方法的实现前面要显式的加上public访问控制符
- 关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.
遇到这个问题说来也怪.新开了一个path的工作空间用来打patch.该Eclipse的默认全局的编译版本是1.6.但是唯独其中的一个插件项目的版本是1.5(可能是唯一的一个,不确定,不知道为什么会是这 ...
- spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法
spring aop pointcut 切入点是类的公共方法(私有方法不行),还是接口的方法 类的公共方法可以,但是私有方法不行 测试一下接口的方法是否能够捕捉到
随机推荐
- firefox被hao123绑架的解决办法
1.在地址栏里输入"about:support" 2.单击配置文件夹后的"打开文件夹"按钮. 3.在弹出来的文件夹中找到那个叫做"user.js&qu ...
- 【分享】jQuery无插件实现 鼠标拖动图片切换 功能
前言 我就想随便叨逼叨几句,爱看就看几句,不爱看就直接跳过看正文就好啦~ 这个方法是仿写页面时我自己研究出来,可能有比我更简单的方法. 但我不管,因为我没查我不知道,我就觉得我的最好啦,耶耶耶~ 效果 ...
- Server 2008 R2远程桌面授权,解决120天过期问题
平时在使用远程桌面过程,我们经常会遇到这样的两个问题. 问题一.远程桌面的连接数限制 Server 2008 R2默认远程桌面连接数是2个用户,如果多余两个用户进行远程桌面连接时,系统就会提示超过连接 ...
- Intrumentation类:ActivityInstrumentationTestCase2学习(1)
public abstract class ActivityInstrumentationTestCase2 extends ActivityTestCase//继承自ActivityTestCase ...
- 前端框架对于未来web移动端的影响
现在前端框架市场比较乱,各种各样的框架参差不齐,这给我带来了很多困惑,同样是很多朋友的困惑吧!因为前端框架有很多种,对于程序员来说选择学习是非常困难的,不可能有几十上百种都要学习吧,不过最好的办法就是 ...
- java并发之线程同步(synchronized和锁机制)
使用synchronized实现同步方法 使用非依赖属性实现同步 在同步块中使用条件(wait(),notify(),notifyAll()) 使用锁实现同步 使用读写锁实现同步数据访问 修改锁的公平 ...
- Chapter 8: Exceptional Control Flow
概述: 我们可以用一种“流”的概念来理解处理器的工作流程,PC(Program Counter)依次为a0,a1,a2,...,an-1,这个序列可以称作control flow.当然我们并不总是按顺 ...
- SpringMVC 视图解析器
SpringMVC 视图解析器 还记得SpringMVC 快速入门中,dispatcher-servlet.xml 配置的视图解析器么.它是SpringMVC 的核心知识点.本章节比较简单,明白视图解 ...
- [DP]P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome
题目翻译(借鉴自@ 神犇的蒟蒻) [问题描述] 追踪每头奶牛的去向是一件棘手的任务,为此农夫约翰安装了一套自动系统.他在每头牛身 上安装了一个电子身份标签,当奶牛通过扫描器的时候,系统可以读取奶牛的身 ...
- python学习笔记 loop&&raw_input 7&& if
1.首先要说range(x) 其返回的是一个list:[0,1,2,....x-1] >>> range(5) [0,1,2,3,4] 2.Loop 共有两种形式,一种for x i ...