C# 接口
2016-07-18 20:35
344 查看
接口
一般情况下,接口只能包含方法、属性、索引器和事件的声明。
不能实例化接口。接口不能有构造函数,也不能有字段。接口定义不允许包含运算符重载,因为接口是公共协定,包含运算符重载会引起与其他.net语言不兼容的情况。
接口成员总是公有的,不能声明为虚拟或静态。
接口的定义和实现
首先,定义IBankAccount接口
然后编写表示银行账户的类,这些类可以完全不同,但它们都表示银行账户,因为它们都实现IBankAccount接口,比如
私有字段Balance,当存款或取款时就调整这个字段。
SaverAccount派生自IBankAccount,表示它获得了IBankAccount的所有成员,但接口实际上并不实现其方法,所以SaverAccount必须提供这些方法的所有实现代码。接口仅表示其成员的存在性,类负责确定这些成员是虚拟的还是抽象的。
测试接口类
要点是把引用变量声明为IBankAccount引用的方法,这表示它们可以指向实现这个接口的任何类的任何实例。
派生的接口
派生自派生接口的类都必须实现IBankAccount的所有方法和TransferBankAccount中定义的新方法。
一般情况下,接口只能包含方法、属性、索引器和事件的声明。
不能实例化接口。接口不能有构造函数,也不能有字段。接口定义不允许包含运算符重载,因为接口是公共协定,包含运算符重载会引起与其他.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中定义的新方法。
相关文章推荐
- C#编程.函数.参数
- C#中判断字符是否大写
- c#中Dictionary、ArrayList、Hashtable和数组的区别是什么
- C# 禁止修改已装箱了的值类型的字段值,但是可以通过接口的方式实现
- C#中的int冒泡排序)
- C#字符串和ASCII码的转换
- C# 扩展方法 总结
- C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错
- C#中浮点数依IEEE-754标准转二进制串 (MODBUS 浮点数转换)
- txt文件中存储多行标题+空格+作者名,现按格式“标题+|+作者”的形式输出
- 中文名转换成英文名(c#)
- C#通过XPath解析xml文件
- 右击/左击treeview,获取树节点
- c# AD域 权限管理
- C#.net Page加载顺寻及回发时执行顺序
- C#中如何获取鼠标的位置坐标
- C# 结构体 struct
- C#学习篇(七)结构体
- C#读取文件的实时进度条
- XML编码utf-8有中文无法解析或乱码 C#