2021-06-26-刘铁猛C#语言入门详解-学习笔记P28接口、依赖反转、单元测试

本文是刘铁猛C#语言学习笔记的第28部分,重点讲解了接口、依赖反转原则(SOLID中的D)以及单元测试。通过实例解释了接口如何减少类间的耦合,并探讨了依赖反转的重要性。同时介绍了如何进行单元测试,包括创建单元测试项目的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P28接口、依赖反转、单元测试

回溯记录:
2021/12/27回溯

一、P28内容总结

  1. 接口
  2. 依赖与耦合
  3. 依赖反转原则(SOLID中的D)
  4. 单元测试

二、接口:服务的提供者实现接口,服务的消费者引用接口
//实例:对一组整数进行求和与求平均值的操作
//这组整数可能存于数组也可能存于ArrayList里

方法一:不使用接口时

using System;
using System.Collections;//为引入ArrayList

namespace ConsoleApp3
{
   
   
    class Program
    {
   
   
        static void Main(string[] args)
        {
   
   
            int[] nums1 = new int[] {
   
    1, 2, 3, 4, 5 };
            ArrayList nums2 = new ArrayList {
   
    1, 2, 3, 4, 5 };
            Console.WriteLine(Sum(nums1));
            Console.WriteLine(Avg(nums1));
            Console.WriteLine(Sum(nums2));
            Console.WriteLine(Avg(nums2));
        }
        
        static int Sum(int[] nums)
        {
   
   
            int sum = 0;
            foreach (var n in nums)
            {
   
   
                sum += n;
            }
            return sum;
        }

        static double Avg(int[] nums)
        {
   
   
            int sum = 0;
            double count = 0;
            foreach (var n in nums)
            {
   
   
                sum += n;
                count++;
            }
            return sum / count;
        }

        static int Sum(ArrayList nums)
        {
   
   
            int sum = 0;
            foreach (var n in nums)
            {
   
   
                //ArrayList元素是object类型,需要进行类型转换
                sum += (int)n;
            }
            return sum;
        }

        static double Avg(ArrayList nums)
        {
   
   
            int sum = 0;
            double count = 0;
            foreach (var n in nums)
            {
   
   
                sum += (int)n;
                count++;
            }
            return sum / count;
        
### 关于C#刘铁猛笔记的相关内容 以下是关于C#刘铁猛笔记的内容总结以及相关知识点的整理: #### 一、C#语言基础概述 C#是一种面向对象编程语言,其设计目标是为了简化开发过程并提高代码可维护性。在刘铁猛老师的课程中提到,C#语言的基础元素包括但不限于类型、变量和方法等内容[^1]。 - **类型**:分为值类型(如`int`, `float`)和引用类型(如类)。其中,`int`类型占用4个字节(32位),当将数值转换为二进制表示形式时,如果不足32位,则会在高位补充0以达到32位长度[^3]。 - **变量存储机制**:对于引用类型的变量,在内存中的分配方式有所不同。具体而言,引用类型的变量会先创建一个指向实际对象的指针,而该对象本身则被放置在堆内存区域。例如以下代码展示了如何定义和初始化一个引用类型变量: ```csharp Example e; e = new Example(); ``` #### 二、Lambda表达式与泛型委托的应用 Lambda表达式可以看作是对匿名函数的一种扩展语法支持,它允许开发者更简洁地编写内联代码片段来实现特定功能。通过将其赋值给某个委托类型的变量,能够方便地传递行为逻辑作为参数使用[^2]。 下面是一个简单的例子演示了如何利用Lambda表达式配合泛型委托完成两数相加操作: ```csharp public class Program { static void Main(string[] args) { DoSomeCalc((a, b) => { return a + b; }, 1, 2); Console.WriteLine("handle result!"); } static void DoSomeCalc<T>(Func<T, T, T> func, T x, T y) { T res = func(x, y); Console.WriteLine(res); } } ``` #### 三、高级特性介绍 除了上述基础知识外,刘铁猛老师还深入探讨了一些更为复杂的主题,比如接口的设计原则、反射技术的实际应用场景以及依赖注入模式的重要性等等。 这些概念虽然相对抽象难懂,但在构建大型软件系统过程中却扮演着至关重要的角色。掌握它们有助于提升个人技术水平,并使所编写的程序更加灵活高效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值