C#继承接口的类和派生接口的实现

原创 2015年07月10日 23:23:35

接口语法上与声明抽象类完全相同,但是不允许提供接口中任何成员的实现方式。一般情况只能包含方法,属性,索引器,和事件声明,不能实例化。


实现接口:接口表示成员的存在性,类负责确定这些方法的实现代码,如果缺少实现代码,编译器会产生错误。

接口可以引用任何实现该接口的类。


源代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace InterfaceDemo2
{


    #region 声明一个接口
    public interface IBankAccount
    {
        void PayIn(decimal amount);
        bool WithDraw(decimal amount);
        decimal Balance { get; }
    }
    #endregion


    #region 第1个类实现接口,即继承该接口
    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("WithDraw Faileed!");
            return false;
        }


       public  decimal Balance
        {
           get
            {
                return balance;
            }
        }


       public override string ToString()
       {
           return String.Format("Balance is :{0,6:C}", balance);
       }
    }
    #endregion


    #region 第2个类实现接口,即继承该接口
    public class SaverAccount2: 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("WithDraw Faileed!");
            return false;
        }


        public decimal Balance
        {
            get
            {
                return balance;
            }
        }


        public override string ToString()
        {
            return String.Format("Balance is :{0,6:C}", balance);
        }
    }
    #endregion


    #region 派生的接口
    public interface ITransferBankAccount :IBankAccount
    {
        //除了IBankAccount中的成员和方法外,新增TransferTo方法
        bool TransferTo(IBankAccount destination, decimal amonut);
    }
    #endregion




    #region 继承派生类
    public class CurrentAccount:ITransferBankAccount
    {
        private decimal balance;
        public void PayIn(decimal amount)
        {
            balance += amount;
        }


        public bool WithDraw(decimal amount)
        {
            if (balance >= amount)
            {
                balance -= amount;
                return true;
            }


            Console.WriteLine("WithDraw Faileed!");
            return false;
        }


        public decimal Balance
        {
            get
            {
                return balance;
            }
        }


        public override string ToString()
        {
            return String.Format("Balance is :{0,6:C}", balance);
        }


        //新增加TransferTo实现函数
        public bool TransferTo(IBankAccount destination,decimal amount)
        {
            bool result;
            result = WithDraw(amount);
            if (result )
            {
                destination.PayIn(amount);
            }
            return result;
        }
    }
    #endregion


    class Program
    {
        static void Main(string[] args)
        {
            IBankAccount Acconut1 = new SaverAccount(); //接口可以引用任何实现该接口的类
            Acconut1.PayIn(200);
            Acconut1.WithDraw(50);
           // Acconut1.WithDraw(500);
            Console.WriteLine("The Account1 Balance is {0}", Acconut1.Balance.ToString ());


            //实现第2个类的方法
            IBankAccount Account2 = new SaverAccount2();
            Account2.PayIn(1000);
            Account2.WithDraw(1200);
            Account2.PayIn(100);
            Console.WriteLine("The Account2 Balance is {0}", Account2.Balance.ToString ());


            //派生接口,类的实现
            ITransferBankAccount ACT = new CurrentAccount();
            ACT.PayIn(500);
            ACT.TransferTo(Acconut1, 200); //转到第一个账户上
            Console.WriteLine("The first Account Banlace is {0:6:C}", Acconut1.Balance.ToString());
            Console.WriteLine("The Current Account Banlace is {0:6:C}", ACT.Balance.ToString());






            Console.Read();


        }
    }
}


相关文章推荐

.NET C#继承之自我解析:同签名方法派生自实体类、接口、抽象类后的生成结果

一句话:编程问题还是要靠自己动手来验证解决! 解决方案是控制台下创建的,这里把整个解决方案贴出来。 5个文件:Program.cs,Class1.cs,Class2.cs,InterFace1.c...

C#--[反射]如何知道一个类都实现了哪些接口和从那个类继承

可能的情况有:从一个类继承,从一个或多个接口继承,从一个类和一个或多个接口继承。 使用Type类的BaseType属性来取得类从哪个类继承。GetInterfaces方法来取得类都实现了哪些接口。 ...

C#类 接口实现

  • 2017年11月18日 14:52
  • 37KB
  • 下载

C# TCP\UDP通信接口类实现

  • 2017年05月25日 15:25
  • 8KB
  • 下载

C#入门10.2——接口的实现和继承(1)

实现过程必须在实现接口的类中完成。 类继承具有单根性,接口可多重继承。 父接口也称为该接口的显示基接口。 接口多重继承时,派生接口名与父接口用冒号隔开,多个父接口之间用逗号隔开。 接口的成员之间不...

C#虚基类继承与接口的区别

有一个月没有好好写过C#了,今天和朋友讨论起这些概念的东西,于是顺便找到一些资料,和大家分享。类定义新的数据类型以及这些新的数据类型进行相互操作的方法定义方式:  class Cat { ...

C#框架阅读笔记--类和接口的继承

类和接口的继承 Framwork类库中几个接口的定义如下:     public interface IDisposiable     {         void Dispose(); ...

C#与java中对抽象类、接口的继承和重写区别

C#: 一、继承 什么是继承:继承是允许重用现有类去创建新类的过程。分类的原则是一个类派生出来的子类具有这个类的所有非私有的属性。 1、继承C#中的类:C#不支持多重继承,C#类始终继承...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#继承接口的类和派生接口的实现
举报原因:
原因补充:

(最多只允许输入30个字)