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

C# 接口

2016-07-18 20:35 344 查看
接口

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

不能实例化接口。接口不能有构造函数,也不能有字段。接口定义不允许包含运算符重载,因为接口是公共协定,包含运算符重载会引起与其他.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中定义的新方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: