.NET C#基础教程第29天: 泛型和自定义接口

作者:微信公众号:【架构师老卢】
6-10 10:50
34

概述:介绍开发人员通常倾向于在代码中添加不必要的装箱,这可能会影响应用程序的性能。本文演示了避免该问题的低效和高效方法。学习目标什么是拳击为什么非通用接口方法效率低下使用泛型的推荐方法开发人员的先决条件基本了解 C# 编程语言。开始什么是拳击装箱是将值类型转换为对象类型的过程。换句话说,它意味着在堆而不是堆栈上分配对象。因此,由于内存使用量增加和垃圾回收需求,因此会产生性能开销。为什么非通用接口方法效率低下在以下方案中,每次将值赋值时,它都会进行装箱,这可能会使应用程序遭受性能压力。public interface INumber {     object Value { get; set; }

介绍

开发人员通常倾向于在代码中添加不必要的装箱,这可能会影响应用程序的性能。本文演示了避免该问题的低效和高效方法。

学习目标

  • 什么是拳击
  • 为什么非通用接口方法效率低下
  • 使用泛型的推荐方法

开发人员的先决条件

  • 基本了解 C# 编程语言。

开始

什么是拳击

装箱是将值类型转换为对象类型的过程。换句话说,它意味着在堆而不是堆栈上分配对象。因此,由于内存使用量增加和垃圾回收需求,因此会产生性能开销。

为什么非通用接口方法效率低下

在以下方案中,每次将值赋值时,它都会进行装箱,这可能会使应用程序遭受性能压力。

public interface INumber  
{  
    object Value { get; set; }  
}  
  
public class Number : INumber  
{  
    public object Value { get; set; }  
}

使用泛型的推荐方法

请在下面找到使用泛型的上一个代码片段的重构版本,该代码段无需装箱即可实现类型安全。

public interface INumber<T>
{
    T Value { get; set; }
}

public class Number<T> : INumber<T> // Utilize generics to avoid boxing
{
    public T Value { get; set; }
}

如何在实践中使用泛型

var intNumber = new Number<int> { Value = 123 };
var floatNumber = new Number<float> { Value = 123.45f };

完整代码

创建另一个名为的类,并添加以下代码片段GenericCustomInterfaces

public static class GenericCustomInterfaces
{
  static List<INumber<int>> intNumbers = new List<INumber<int>>();
  static List<INumber<double>> doubleNumbers = new List<INumber<double>>();

  public static void Example()
  {
      // Populate the list with integers
      for (int i = 0; i < 10; i++)
      {
          intNumbers.Add(new Number<int>(i));
      }

      // Populate the list with doubles
      for (double d = 0.5; d < 10.0; d += 1.0)
      {
          doubleNumbers.Add(new Number<double>(d));
      }

      // Process and display integer numbers
      Console.WriteLine("Integer Numbers:");
      foreach (var num in intNumbers)
      {
          Console.WriteLine(num.Value);
      }

      // Process and display double numbers
      Console.WriteLine("\nDouble Numbers:");
      foreach (var num in doubleNumbers)
      {
          Console.WriteLine(num.Value);
      }
  }
}

添加接口及其类实现,如下所示

public interface INumber<T>
{
    T Value { get; set; }
}

public class Number<T> : INumber<T>
{
    public T Value { get; set; }
    public Number(T value)
    {
        Value = value;
    }
}

从 main 方法执行,如下所示

#region Day 29: Generics & Custom Interfaces  
static string ExecuteDay29()  
{  
    GenericCustomInterfaces.Example();  
  
    return "Executed Day 29 successfully..!!";  
}  
  
#endregion

控制台输出

Integer Numbers:  
0  
1  
2  
3  
4  
5  
6  
7  
8  
9  
  
Double Numbers:  
0.5  
1.5  
2.5  
3.5  
4.5  
5.5  
6.5  
7.5  
8.5  
9.5

源代码获取:公众号回复消息【code:82684

相关代码下载地址
重要提示!:取消关注公众号后将无法再启用回复功能,不支持解封!
第一步:微信扫码关键公众号“架构师老卢”
第二步:在公众号聊天框发送code:82684,如:code:82684 获取下载地址
第三步:恭喜你,快去下载你想要的资源吧
阅读排行