1.接口
C#提供了可供类继承的接口,在此解释一下经常遇到的IEnumerable,在此首相解释一下接口,如下例所示:
/// <summary>/// 简述Interface的用法/// </summary>//定义接口,接口都是公用的,其内部的方法属性都是公用的,无需作用域修饰符public interface IAttack{
string AttackMethod{
get; set;}void Attack();}//定义两个不同类型的攻击者,两者均继承了此接口public class Attacker1:IAttack{
private string attacker1="Attacker1 发动了攻击";public string AttackMethod{
get;set;}public void Attack(){
Console.WriteLine(attacker1);}}class Attacker2:IAttack{
private string attacker2 = "Attacker2 发动了攻击";public string AttackMethod{
get;set;}public void Attack(){
Console.WriteLine(attacker2);}}class Program{
static void Main(string[] args){
//可以通过接口来声明,并通过相关类来构造//接口的思想在于此,通过统一的接口定义,实现不通方法IAttack a1 = new Attacker1();a1.Attack();Attacker1 a2 = new Attacker1();a2.Attack();IAttack a3 = new Attacker2();a3.Attack();Console.ReadKey();}}
2.IEnumerable
接口即统一定义了一些方法、属性、所以和事件的切入口,通过不同的类的继承来实现不同的方法。IEnumerable则是C#定义的接口它拥有一个GetEnumerator方法,该方法返回值为IEnumerator类型,IEnumerator为拥有一个Current属性和MoveNext(return bool)、Reset()方法的接口。在C#中string类和list类均继承了IEnumerable,并对方法GetEnumerator进行了实现,所以根据接口的定义与实现,则下列语句是合法的:
IEnumerable ab = new List<int>();IEnumerable abc = new string(b);
起效果等同于
List ab=new List();
string ab=new string(…)
用IEnumerable定义的对象必须用实现GetEnumerator方法的类(即继承自IEnumerable的类)进行构造。在C#中可以使用foreach语句的类需要继承IEnumerable接口,实现其对应的方法。