zoukankan      html  css  js  c++  java
  • 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中定义的新方法。

    如果您觉得感兴趣的话,可以添加我的微信公众号:一步一步学Python
  • 相关阅读:
    用Jenkins构建Django持续集成环境
    DACLs and ACEs
    windows共享文件分析
    summary
    Mysql InnoDB行锁实现方式
    网关 整理 fastcgi wsgi
    Git提交代码规范 而且规范的Git提交历史,还可以直接生成项目发版的CHANGELOG(semantic-release)
    松本行弘:代码的未来(图灵访谈)
    “对外部(局部)变量的访问”是C语言函数指针的最大弱点
    CAP解决方案-BASE
  • 原文地址:https://www.cnblogs.com/xingzhui/p/5682568.html
Copyright © 2011-2022 走看看