[Day29]C# 鸡础观念- 物件导向(oop)~介面(Interface)

书同文,车同轨,
听说召唤恶魔时,需要与恶魔签订契约,
契约内容双方都得遵守,
C#也拥有跟类别签订契约的功能

介面(Interface)/images/emoticon/emoticon32.gif

  • 在介面命名中大家习惯以I开头
  • 在介面中,我们要去定义与规范类别成员
  • 介面中不会去写任何得逻辑
  • 而且介面的成员永远都是公用的,所以不需要也不能加上public
  • 如果需要签合约的类别就必须继承介面

范例:每台ATM都需要统一他们的方法,因此我们来建立一个ATM的介面吧

 //ATM介面
    interface IATM
    {
        //方法:存款
        void PayIn(int amount);
        //方法:收款
        bool GetMoney(int amount);
        //属性:帐户余额
        int Balance { get; }
    }

这就是一个介面的样子介面最大的用途就是让所有与他签合约的类别保持方法与成员一致

范例:我们来实作一台鸡头牌ATM,并与介面签合约吧

    //鸡头牌ATM
    public class ChickenATM : IATM //需要继承介面
    {
        //私有变数
        private int blance;

        //继承後,就必须有介面里面定义的方法
        //方法:存款
        public void PayIn(int amount)
        {
            blance += amount;
        }
        //方法:收款
        public bool GetMoney(int amount)
        {
            //判断余额是否足够
            if (blance >= amount)
            {
                blance -= amount;
                return true;
            }
            else
            {
                Console.WriteLine("余额不足,取款失败!");
                return false;
            }
        }

        //属性:帐户余额
        public int Balance
        {
            get
            {
                return blance;
            }
        }
    }
  }

范例:既然Atm都盖好了,我们就来测一下

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

namespace CsharpDemo
{
  class Program
  {
      ///有包含介面的宣告方式,前面可先选方式
     public static IATM chickenAtm = new ChickenATM();

      static void Main(string[] args)
      {
          //先让客人选择功能
          Console.WriteLine();
          Console.WriteLine("请选择需要模式");
          Console.WriteLine("存款请按1,领款请按2");
          string goFuncton = Console.ReadLine();
          

          //判断要使用哪个方法
          if (goFuncton == "1")//领钱
          {
              Console.WriteLine("请输入要存入的金额!");
              int amount = Convert.ToInt32(Console.ReadLine());
              //付款方法
              chickenAtm.PayIn(amount);
          }
          else if(goFuncton == "2")
          {
              Console.WriteLine("请输入要领取的金额!");
              int amount = Convert.ToInt32(Console.ReadLine());
              //付款方法
              chickenAtm.GetMoney(amount);
          }

          Console.WriteLine("目前余额 : " + chickenAtm.Balance);

          //这边用递回来让方法可以持续轮回
          string[] array = new string[0];
          Main(array);
      }
  }
  //ATM介面
  interface IATM
  {
      //方法:存款
      void PayIn(int amount);
      //方法:收款
      bool GetMoney(int amount);
      //属性:帐户余额
      int Balance { get; }
  }
  //鸡头牌ATM
  public class ChickenATM : IATM //需要继承介面
  {
      //私有变数
      private int blance;

      //继承後,就必须有介面里面定义的方法
      //方法:存款
      public void PayIn(int amount)
      {
          blance += amount;
      }
      //方法:收款
      public bool GetMoney(int amount)
      {
          //判断余额是否足够
          if (blance >= amount)
          {
              blance -= amount;
              return true;
          }
          else
          {
              Console.WriteLine("余额不足,取款失败!");
              return false;
          }
      }

      //属性:帐户余额
      public int Balance
      {
          get
          {
              return blance;
          }
      }
  }
 }

来玩看看以下剧情会产生的结果吧

  1. 先领50元
  2. 今天发工资啦,共500元,把钱都存进去吧
  3. 忘记把吃饭钱领出来了,赶快领100来吃饭

结果:

请选择需要模式
存款请按1,领款请按2
2
请输入要领取的金额!
50
余额不足,取款失败!
目前余额 : 0

请选择需要模式
存款请按1,领款请按2
1
请输入要存入的金额!
500
目前余额 : 500

请选择需要模式
存款请按1,领款请按2
2
请输入要领取的金额!
100
目前余额 : 400

请选择需要模式
存款请按1,领款请按2

以上就是我们的介面,他主要用途是在统一天下的,我们明天再见了鸭


<<:  [Day30]30天心得

>>:  Day-18 Kernel Mode

Azure CDN (akamai) 强制置换图片教学

葛瑞部落格欢迎光顾 CDN应用目的 CDN的目的只有一个,当需求来访时能给予最佳体验,不要因为慢而被...

Ruby基本介绍(五)Enumerable(枚举)入门

今天是8/8...来首"Daddy"吧! 本篇会提到的事。 1.Ruby回圈中的...

Day 2 : 建立Python开发环境吧(Windows)!

工欲善其事,必先利其器。今天就来安装最简易的Python环境吧!废话不多说,直接来开始。 在撰写程序...

【心得】 会让人晕3D的transform

昨天有先提到了transform的位移与relative的差别了 那麽今天再来详细一些比较常使用的t...

【没钱买ps,PyQt自己写】Day 19 - 使用 QProgressBar,制作进度条的功能

看完这篇文章你会得到的成果图 前言 这篇我们要来学一个新的东西 QProgressBar! QPro...