C# 接口

接口

一般情况下,接口只能包含方法、属性、索引器和事件的声明。

不能实例化接口。接口不能有构造函数,也不能有字段。接口定义不允许包含运算符重载,因为接口是公共协定,包含运算符重载会引起与其他.net语言不兼容的情况。

接口成员总是公有的,不能声明为虚拟或静态。

public interface IDisposable
{
         void Dispose();
}

接口的定义和实现

首先,定义IBankAccount接口

namespace Wrox.ProCSharp
{
         public interface IBankAccount
         {
                   void PayIn(decimal amount);
                   Bool Withdraw (decimal amount);
                   Decimal Balance {get;}
        }
}        

 

然后编写表示银行账户的类,这些类可以完全不同,但它们都表示银行账户,因为它们都实现IBankAccount接口,比如

namespace Wrox.ProCSharp.VenusBank
{
         public class SaverAccount:IBankAccount
         {
                   private decimal balance;
                   public void PayIn(decimal amount) { balance +=amount;}
                   public bool Withdraw ( decimal amount )
{
if(balance>=amount) { balance -=amount; return true;}
console.WriteLine(“Withdrawal attempt failed.”);
return false;
}
public decimal Balance { get;}
public override string ToString() { return String.Format(“Venus Bank Saver: Balance={0,6:C}”,balance);}
}
}

 

私有字段Balance,当存款或取款时就调整这个字段。

SaverAccount派生自IBankAccount,表示它获得了IBankAccount的所有成员,但接口实际上并不实现其方法,所以SaverAccount必须提供这些方法的所有实现代码。接口仅表示其成员的存在性,类负责确定这些成员是虚拟的还是抽象的。

 

测试接口类

Using System

Using Wrox.ProCSharp

Using Wrox.ProCSharp.VenusBank

 

static void Main()

{

         IBankAccount venusAccount=new SaverAccount();

         //

}

 

要点是把引用变量声明为IBankAccount引用的方法,这表示它们可以指向实现这个接口的任何类的任何实例。

派生的接口

public interface ITransferBankAccount: IBankAccount

{

       bool TransferTo (IBankAccount destination, decimal amount);

}

 

派生自派生接口的类都必须实现IBankAccount的所有方法和TransferBankAccount中定义的新方法。

posted @ 2016-07-18 20:35  xingzhui  阅读(331)  评论(0编辑  收藏  举报