对C#中的接口使用和理解 转

接口就是定义一个协定,只是一个架子而已,必须由结构或者类来进行实现。

接口的定义和使用

例如:定义一个接口

interface Border

{

int weight //没有实现

{

set;

get;

}

int height //没有实现

{

set;

get;

}

}//什么都没有做,只告诉大家两个属性weight,height,要使用这个接口,必须对它进行实现。

class Square:Border //注意对接口的实现

{

private int x;

private int y;

public int weight

{

get

{

return x;

}

set

{

x = value;

}

}

public int height

{

get

{

return y;

}

set

{

y = value;

}

}

对接口的应用

Border b = new Square();

b.weight =2;

b.height = 2;

Console.WriteLine("heighe is {0,weight is {1}",b.height,b.weight);

上述简单对接口进行了一个举例。运行之后相信对接口应该有个简单的概念。

接口的注意事项

1 实现类必须对接口的所有成员进行实现,例如上例中的weight和height属性都要实现。

2 接口不能包括变量成员,只能是属性、事件、方法、索引器(上述例子只有两个属性)

3 实现接口的类必须严格按照接口的定义来进行实现

4 实现接口可以隐式和显式来实现

例如:

interface IControl //接口1

{

void Paint();

}

interface ISurface //接口 2

{

void Paint();

}

//注意:上述两个接口都包含方法Paint(),下面实现类中必须进行显式实现

class SampleClass : IControl, ISurface

{

Void Paint()//如此隐式实现肯定容易出现歧义

void IControl.Paint() //显式实现

{

System.Console.WriteLine("IControl.Paint");

}

void ISurface.Paint()//显式实现

{

System.Console.WriteLine("ISurface.Paint");

}

}

5 接口中的成员显式实现后,必须通过接口调用,而不能直接通过类进行调用

上述事例中 SampleClass sp = new SampleClass();

Sp.Paint()这样是错误的,必须IControl I1 = (IControl) sp;然后I1. Paint();

6 一个接口可以由几个类进行实现,也可以只有一个类进行实现,也可以叫做接口的多态

7 一个实现类可以同时实现几个接口,也可以实现唯一一个接口

8 已有实现类的接口定义后不能随意更改,否则容易打乱实现类。

完成接口练习的例子:

using System;

using System.Collections.Generic;

using System.Text;

interface Border //定义接口

{

int weight

{

set;

get;

}

int height

{

set;

get;

}

}

interface Area   //定义接口

{

int ReAreaValue();

}

interface Perimeter //定义接口

{

int RePerimeterValue();

}

interface px //定义接口

{

string pring();

}

interface IControl //定义接口

{

void Paint();

}

interface ISurface //定义接口

{

void Paint();

}

class Square:Border,Area,Perimeter //实现接口,同时实现Border,Area,Perimeter三个接口

{

private int x;

private int y;

public int weight

{

get

{

return x;

}

set

{

x = value;

}

}

public int height

{

get

{

return y;

}

set

{

y = value;

}

}

public int ReAreaValue()

{

return x * y;

}

public int RePerimeterValue()

{

return (x + y) * 2;

}

}

class tempclass : Area //实现接口,再次实现Area接口 [多态性]

{

public int x = 3;

public int ReAreaValue()

{

return x*x;

}

}

class SampleClass : IControl, ISurface //实现接口 IControl, ISurface

{

void IControl.Paint() //显示实现

{

System.Console.WriteLine("IControl.Paint");

}

void ISurface.Paint()//显示实现

{

System.Console.WriteLine("ISurface.Paint");

}

}

class MainClass

{

static void wrtieBorder(Border b)

{

Console.WriteLine("heighe is {0,weight is {1}",b.height,b.weight);

}

static void writeArea(Area a)

{

Console.WriteLine("a.ReAreaValue() is {0}", a.ReAreaValue());

}

static void writePerimeter(Perimeter p)

{

Console.WriteLine("p.RePerimeterValue() is {0}", p.RePerimeterValue());

}

static void Main()

{

Square s1 = new Square();

s1.weight =2;

s1.height = 2;

wrtieBorder(s1);

writePerimeter(s1);

writeArea(s1);

tempclass temp = new tempclass();

Console.WriteLine("Main tempclass object temp.ReAreaValue() is " + temp.ReAreaValue());

writeArea(temp);

Border b = new Square();

b.weight = 5;

b.height = 6;

wrtieBorder(b);

SampleClass obj = new SampleClass();

IControl c = (IControl)obj;

c.Paint();

ISurface s = (ISurface)obj;

s.Paint(); // Calls ISurface.Paint on SampleClass.

Console.ReadLine();

}

}

接口与抽象类

接口与抽象类有很多相似的地方,也有区别的地方:如下

抽象类:一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可以不提供实现

子类只能从一个抽象类继承

抽象类应主要用于关系密切的对象

如果要设计大的功能单元,则使用抽象类。

如果预计要创建组件的多个版本,则创建抽象类

接口:是完全抽象的成员集合,不提供认识实现。

类或者结构可以继承几个接口。

接口最适合为不相关的类提供通用功能

如果要设计小而简练的功能块,则使用接口

 总结

接口,以下是我们必须乱记于心的地方,接口只包含方法、委托或事件的签名。方法的实现是在实现接口的类中完成的,接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法、属性、索引器、事件,一个接口可从一个或多个基接口继承。当基类型列表包含基类和接口时,基类必须是列表中的第一项。

实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实例访问。

时间: 2024-09-29 16:11:56

对C#中的接口使用和理解 转的相关文章

java中的接口深层理解

深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然.今天我们就一起来学习一下Java中的接口和抽象类.下面是本文的目录大纲: 一.抽象类 二.接口 三.抽象类和接口的区别 若有不正之处,请多多谅解并欢迎批评指正,不甚感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.

理解Java中的接口

一.为什么要使用接口 假如有一个需求:要求实现防盗门的功能.门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能. 分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的同时又继承自锁,防盗门不是锁,不符合继承中is a的关系,在java中支持单继承.那么我们如何来解决这一问题,这时就要用到接口. 二.什么是接口

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

漫谈Java程序设计中的接口应用

Java语言提供了一种接口(interface)机制.这种接口机制使Java的面向对象编程变得更加灵活.我们可以用接口来定义一个类的表现形式,但接口不能包含任何实现.在<Thinking in Java>一书中,作者对接口有这样的描述:“接口(interface)比抽象(abstract)的概念更进了一步.你可以把一个接口看成是一个纯的抽象类.”我认为作者对接口的这一解释再准确不过了. 理解并用好接口机制将帮助我们更好的掌握Java这种面向对象的编程语言.下面我们来讨论一下接口的使用规则以及相

java中的回调机制的理解(小例子)

这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到.在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数. 正常情况下开发人员使用已经定义好的API,这个过程叫Call.但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让

12、Java中的接口

接口:初期理解,可以认为是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示.class用于定义类interface 用于定义接口. 接口定义时,格式特点:1,接口中常见定义:常量,抽象方法.2,接口中的成员都有固定修饰符. 常量:public static final 方法:public abstract 记住:接口中的成员都是public的. 接口:是不可以创建对象的,因为有抽象方法.需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化.否则子类是一

【转 】C#中的接口实现多态

C#中的接口实现多态 我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02.接口可以实现多继承,弥补单继承的缺陷.  03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知 04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体 05.如果一个类实现了某个接口,就得实现该接口中所有的方法 06.接口要谨慎使用,防止出现接口污染!

android中Parcelable接口的使用

android中Parcelable接口的使用 一.理解 Parcelable是一个接口.用来实现序列化.与此类似的还有一个接口Serializable,这是JavaSE本身支持的,而Parcelable是android特有的.二者比较: 1.Parcelable使用起来稍复杂点,而后者使用起来非常简单.下面例子中会看到. 2.Parcelable效率比Serializable高,支持Intent数据传递,也支持进程间通信(IPC). 3.Parcelable使用时要用到一个Parcel,可以简

python中的接口

什么是接口 ? 接口只是定义了一些方法,而没有去实现,多用于程序设计时,只是设计需要有什么样的功能,但是并没有实现任何功能,这些功能需要被另一个类(B)继承后,由 类B去实现其中的某个功能或全部功能. 个人的理解,多用于协作开发时,有不同的人在不同的类中实现接口中的各个方法. 在python中接口由抽象类和抽象方法去实现,接口是不能被实例化的,只能被别的类继承去实现相应的功能. 个人觉得接口在python中并没有那么重要,因为如果要继承接口,需要把其中的每个方法全部实现,否则会报编译错误,还不如