C# 接口的使用案例

IEnumerable接口的使用案例

  • [1. IEnumerable接口同时满足数组和列表](#1. IEnumerable接口同时满足数组和列表)
  • [2. OPPO和VIVO使用相同接口](#2. OPPO和VIVO使用相同接口)

1. IEnumerable接口同时满足数组和列表

  • 利用 IEnumerable 这个接口来实现一个方法可以同时满足数组和列表传入。
  • 接口就是供需双方的约定/契约,需求方是用户需要计算一组数据的总和/平均数
  • 提供方负责提供这样的算法,但是要求用户输入一个可以被迭代 的集合,集合里面的元素为double类型。 数组和列表有一个相同的接口
    IEnumerable ,所以可以通过这个接口将数组和列表统一起来。
  • 当然这样做的前提是求和/求平均数操作这两个方法只需要使用迭代功能来遍历数据集里面的数据,而放弃了数组或列表其特有的属性和方法。
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            double[] Array1 = new double[5] { 1, 2, 3, 4, 5 };
            List<double> list = new List<double> { 6, 7, 8, 9, 10 };
            Calculate cal = new Calculate();
            double res1 = cal.Sum(Array1);
            double res2 = cal.Avg(list);
            Console.WriteLine(res1);
            Console.WriteLine(res2);
        }
    }
    class Calculate
    {
        public double Sum(IEnumerable<double> nums)
        {
            double result = 0.0d;
            foreach (var item in nums)
            {
                result += item;
            }
            return result;
        }
        public double Avg(IEnumerable<double> nums)
        {
            double sum = 0.0d;
            int count = 0;
            foreach (var item in nums)
            {
                sum += item;
                count++;
            }
            return sum / count;
        }
    }
}

2. OPPO和VIVO使用相同接口

  • 手机类(抽象类 功能包括打电话、接电话、发短信、收短信。)
  • 抽象类是包含了未完全实现的方法,而接口所包含的所有方法都应该是未实现的。(抽象类------未完全实现,接口------完全未实现)
  • 以上四种功能在手机这个类里面应该全部作为纯虚方法存在,然后到具体品牌的手机类中去实现。
  • 也就是说手机类中的所有方法全部都是未实现的方法,这样手机抽象类其实就是接口了。
  • 需要注意的是,接口中的方法是没有修饰符的,默认为public,而且也没有方法体。
  • 普通类实现接口方法时,必须实现接口里的所有方法,而且要加上public修饰符。
  • 当然了,如果你将现在的这个类作为抽象类,那它就可以先实现接口中的一部分方法,剩下的未被实现的方法留着给这个抽象类的子类去实现。
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //我买了一个oppo手机
            PhoneUser user = new PhoneUser(new OPPO());
            user.usePhone();
            //我又买了一个vivo手机
            user = new PhoneUser(new VIVO());
            user.usePhone();
        }
    }


    interface IPhone
    {
        void Ring();
        void Answer();
        void Send();
        void Receive();
    }

    class OPPO:IPhone
    {
        public void Ring()
        {
            Console.WriteLine("Hello!");
        }
        public void Answer()
        {
            Console.WriteLine("This is Jay!");
        }
        public void Send()
        {
            Console.WriteLine("Good Morning!");
        }
        public void Receive()
        {
            Console.WriteLine("Good Evening!");
        }
    }
    class VIVO : IPhone
    {
        public void Ring()
        {
            Console.WriteLine("Hello!");
        }
        public void Answer()
        {
            Console.WriteLine("This is Jay!");
        }
        public void Send()
        {
            Console.WriteLine("Good Morning!");
        }
        public void Receive()
        {
            Console.WriteLine("Good Evening!");
        }
    }

    //用户类
    class PhoneUser
    {
        private IPhone _iphone;
        public PhoneUser(IPhone iphone)
        {
            _iphone = iphone;
        }
        public void usePhone()
        {
            _iphone.Ring();
            _iphone.Answer();
            _iphone.Send();
            _iphone.Receive();
        }

    }
}
相关推荐
小尧嵌入式2 分钟前
【Linux开发一】类间相互使用|继承类和构造写法|虚函数实现多态|五子棋游戏|整数相除混合小数|括号使用|最长问题
开发语言·c++·算法·游戏
黎雁·泠崖2 分钟前
Java数组进阶:内存图解+二维数组全解析(底层原理+Java&C差异对比)
java·c语言·开发语言
Rubin智造社3 分钟前
见路不走:从《天幕红尘》读懂2026年的创新密码
android·开发语言·kotlin
Remember_9933 分钟前
【JavaSE】一站式掌握Java面向对象编程:从类与对象到继承、多态、抽象与接口
java·开发语言·数据结构·ide·git·leetcode·eclipse
你的冰西瓜4 分钟前
C++中的map容器详解
开发语言·c++·stl
leo__5205 分钟前
基于C#实现软件注册码注册机制
开发语言·c#·哈希算法
满栀5857 分钟前
插件轮播图制作
开发语言·前端·javascript·jquery
不会c嘎嘎22 分钟前
QT中的事件机制
开发语言·qt
a努力。24 分钟前
阿里Java面试被问:WebSocket的心跳检测和自动重连实现
java·开发语言·python·websocket·面试·职场和发展·哈希算法
行秋25 分钟前
MATLAB 中的两大电力仿真库:Simscape Electrical(蓝色库) vs SimPowerSystems(黑色库)
开发语言·matlab