您的位置:首页 > 编程语言 > C#

Csharp中的关键字示例及代码演示之接口

2011-10-14 15:55 330 查看
接口(Interface):

  在以往我们对接口(Interface)的理解中,可以说接口就是一种契约,定义了遵守该契约的签名。

  当然,接口和前面所说的抽象类很相似,不能被实例化,被继承时派生类必须实现接口中的签名。但是抽象类是特殊的类,只能是单继承,而接口可以多继承,接口可以包含属性,事件,索引器和方法(此方法不能包含实现的code)。实例1:

  

/*
* ${res:XML.StandardHeader.CreatedByYangbo}
* 用户: ${YangBo}
* 日期: 10/14/2011
* 时间: 13:50
*
*/
using System;
using InterFaceTestDemo;

namespace InterFaceTestDemo
{
//接口可以多继承
public class Animal:IAnimal,IEat
{
private string name;
private Int32 age;
public Animal(string name,Int32 age)
{
this.age=age;
this.name=name;
}

public String Name
{
get
{
return name;
}
set
{
name=value;
}
}

public Int32 Age
{
get
{
return age;
}
set
{
age=value;
}
}

//接口可以包含方法
public interface IEat
{
void Eat();
}
//可以包含索引器
public interface INum
{
Int32 this[Int32 index]
{get;set;}
}

//接口可以包含属性
public interface IAnimal
{
String Name
{get;set;}
Int32 Age
{get;set;}

}
//包含事件
public interface IEvent
{
event EventHandler IsDog;
}
public class Dog:INum,IEvent
{
event EventHandler IsDog;
private void IsDog()
{
//ToDO: Something for this Function
}

private Int32[] arr=new Int32[100];
public Int32 this[Int32 index]
{
get
{
return arr[index];
}
set
{
arr[index]=value;
}
}
}

public static void Main()
{
Animal an=new Animal("Duck",2);
Console.WriteLine("name is {0},age is {1}",an.Name,an.Age);

Dog dog=new Animal.Dog;
Random ad=new Random(100);
for (int i = 0; i < 10; i++) {
dog[i]=ad.Next();
Console.WriteLine("The Elements #{0}={1}",i,dog[i]);
}
}

}
}


  Interface and Virtual Class

  很多时候,关于接口和抽象类的区别的文章不胜枚举,但是仍有很多疑惑,什么时候该用接口,什么时候该用抽象类呢?我们说接口是一个契约,是一组规则,继承接口的派生类或接口要遵守该接口的约束。比如上面实现的Animal类和IAnimal接口。也就是说,Animal类继承了IEat接口,那就必须要实现该接口所包含的Eat()方法。关于抽象类,强调更多的是共性,如所有实现了Animal类的动物都要吃,所以可以写一个抽象类的抽象方法,然后继承该类的Animal就都可以去KFC了,哈哈。另外,接口是不同类对象之前的行为抽象。抽象类是同类对象之间存在的抽象。

  判断应用Interface or Virtual Class的原则

    Is-A 与 CAN-DO关系,一个类型仅可以继承一个实现,如果基类和派生类有一个Is-A关系,就可以考虑用抽象类,也就像我们的Dog类和Animal类一样,我们可以说狗是动物,但不能说动物是狗,千万别!!这个就是Is-A的关系. 接口隐含一个CAN-DO关系,如果认为CAN-DO功能属于多个类型,就使用接口。

    易用性。我们使用计算机的目的就是为了简单,方便(我这么想的,就目前计算机的作用不仅仅是这样的”简单“了)如果你的程序让测试的同事都无法忍受,那你还期望客户给你Silme么?当然在不影响性能与功能的前提下,代码越简单越好。有些地方感觉用抽象类或是接口都可以,那么为何不使用抽象类?!你要清楚,要重新创建接口,并且还要实现接口中的所有方法,还不能共享大量的代码,谁让你继承了呢?!

  应用场景的不同才是抽象类和接口的区别的根本。项目是应需求而生的,有什么样的需求,然后再这样的场景下利用最合适的技术才是王道。

以上属个人观点,如有疑问可参与讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: