C# 接口应用示例

C# 接口应用示例

一.定义

接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。

通常用Interface关键字进行定义。

接口内部只包含方法名,属性等,不含任何访问修饰符。

二.疑问

很多像笔者这样的新手在看到接口的定义及作用后都会产生疑问:接口内部方法只有方法名我们何必去继承这个接口呢?完全可以在应用方法的类里写一个方法调用嘛,何必多此一举呢?

每个继承的类的方法内部代码依然也是不一样,继承时如果不写全继承的方法还会报错,还不如每个类自己写个方法解决呢。

这个问题让我整整找了一天的答案,如下是笔者见解。

三.代码实例

做个和银行存取款相关的实例,有这样三个银行:建行,工行,农行,有个公民同时有这三个银行的账号。

先建个接口IBank

public interface IBank
{
        string Name { get; set; }
        int Count { get; set; }
        int InMoney(int money);
        int OutMoney(int money);
}

然后分别建立三个银行的类,继承自IBank

class ICBCBank:IBank
{
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        private int count;
        public int Count
        {
            get { return count; }
            set { count = value; }
        }
        public int InMoney(int money)
        {
            count += money;
            return count;
        }
        public int OutMoney(int money)
        {
            count -= money;
            return count;

        }
}

其他两个类似这个,就不写了。内部包含Name和Count两个属性与InMoney,OutMoney两个存取钱方法。

 IBank banker;
 banker = new ICBCBank { Name = "ICBCBank", Count = 100 };
 DrawMoney(banker);
 banker = new CCBBank { Name = "CCBBank", Count = 200 };
 DrawMoney(banker);
 banker = new ABCBank { Name = "ABCBank", Count = 300 };
 DrawMoney(banker);





private void DrawMoney(IBank banker)
{
           banker.OutMoney(10);
           text01.Text+=banker.Name+"  "+ banker.Count.ToString()+"\n";
}  

通过接口建立banker,该公民具有三个银行的账户,每次只要将其转换到某一银行去之后,即可对其在该银行内的账户进行取钱动作。

在下面DrawMoney动作中,传入参数类型为IBook,可以传入任何银行的参数,大大方便的操作处理。

假如该公民再有其他银行账户时,增加该银行类,继承IBank即可,改动很小。

接口解耦示例:(接口就是为解耦合而生)
下面有一个手机功能的接口Phone,两个品牌的手机实现了接口,还有一个用户类型的类PhoneUser,它的构造函数参数是接口类型的变量,然后在主函数中实例化某个品牌的手机,就能调用其相应的函数。

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

namespace Example0329
{
    class Program
    {
        static void Main(string[] args)
        {
            PhoneUser objUser = new PhoneUser(new Nokia());//这里是重点,想使用什么类型的手机实例化什么类型的手机,因为参数是接口类型的
            objUser.UserPhone();
            Console.ReadKey();
        }
    }

    interface Phone
    {
        void Dail();//打电话
        void PickUp();//接电话
        void SendMsg();//发消息
        void ReceiveMsg();//收消息
    }

    class Nokia : Phone
    {
        public void Dail()
        {
            Console.WriteLine("Nokia Dail ...");
        }
        public void PickUp()
        {
            Console.WriteLine("Nokia PickUp ...");
        }
        public void SendMsg()
        {
            Console.WriteLine("Nokia SendMsg ...");
        }
        public void ReceiveMsg()
        {
            Console.WriteLine("Nokia ReceiveMsg ...");
        }
    }

    class HuaWei : Phone
    {
        public void Dail()
        {
            Console.WriteLine("HuaWei Dail ...");
        }
        public void PickUp()
        {
            Console.WriteLine("HuaWei PickUp ...");
        }
        public void SendMsg()
        {
            Console.WriteLine("HuaWei SendMsg ...");
        }
        public void ReceiveMsg()
        {
            Console.WriteLine("HuaWei ReceiveMsg ...");
        }
    }

    class PhoneUser
    {
        private Phone _phone;
        public PhoneUser(Phone objPhone)//这里参数是接口类型的构造函数
        {
            _phone = objPhone;
        }

        public void UserPhone()
        {
            _phone.Dail();
            _phone.PickUp();
            _phone.SendMsg();
            _phone.ReceiveMsg();
        }
    }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值