• C# 重载的几种实现


    算法重用是非常普遍的需求,在C#中可以使用如下手段实现,非常简单,自己记录一下,方便查询。

    以一个小功能为例来说明一下:打印1-5这5个数,和A-E这5个字符。

    重载方式

    static void Main(string[] args)
    {
        PrintValues(1, 5);
        PrintValues('A', 'E');
        Console.ReadLine();
    }
    
    
    private static void PrintValues(int startIndex, int endIndex)
    {
        if (startIndex > endIndex)
        {
            int temp = endIndex;
            endIndex = startIndex;
            startIndex = temp;
        }
    
        for (int i = startIndex; i <= endIndex; i++)
        {
            Console.WriteLine(i.ToString());
        }
    }
    
    private static void PrintValues(char startIndex, char endIndex)
    {
        if (startIndex > endIndex)
        {
            char temp = endIndex;
            endIndex = startIndex;
            startIndex = temp;
        }
    
        for (char i = startIndex; i <= endIndex; i++)
        {
            Console.WriteLine(i.ToString());
        }
    }

    默认值方式

    static void Main(string[] args)
    {
        PrintValues(1);
        PrintValues('A');
        Console.ReadLine();
    }
    
    
    private static void PrintValues(int startIndex, int endIndex = 5)
    {
        if (startIndex > endIndex)
        {
            int temp = endIndex;
            endIndex = startIndex;
            startIndex = temp;
        }
    
        for (int i = startIndex; i <= endIndex; i++)
        {
            Console.WriteLine(i.ToString());
        }
    }
    
    private static void PrintValues(char startIndex, char endIndex = 'E')
    {
        if (startIndex > endIndex)
        {
            char temp = endIndex;
            endIndex = startIndex;
            startIndex = temp;
        }
    
        for (char i = startIndex; i <= endIndex; i++)
        {
            Console.WriteLine(i.ToString());
        }
    }

    好吧,对于很多含有默认值的函数来说,这个是有效减少重载的方式。

    泛型方式
      这个例子我简单试了一下,没找到使用泛型合适的方式,壮士,教我!好在我直接使用dynamic实现了,也不怎么纠结。看其中的交换的那个可能实现:

    static void Main(string[] args)
    {
        int startIndex = 1;
        int endIndex = 5;
        Swap<int>(ref startIndex, ref endIndex);
    
        char startCharIndex = 'A';
        char endCharIndex = 'E';
        Swap<char>(ref startCharIndex, ref endCharIndex);
    
        Console.ReadLine();
    }
    
    private static void Swap<T>(ref T startIndex, ref T endIndex)
    {
        T temp = endIndex;
        endIndex = startIndex;
        startIndex = temp;
    }

      当然了,强大的泛型可不是这么简单货,感兴趣自己搜索。

    dynamic方式

    static void Main(string[] args)
    {
        PrintValues(1, 5);
        PrintValues('A', 'E');
        Console.ReadLine();
    }
    
    private static void PrintValues(dynamic startIndex, dynamic endIndex)
    {
        if (startIndex > endIndex)
        {
            dynamic temp = endIndex;
            endIndex = startIndex;
            startIndex = temp;
        }
    
        for (dynamic i = startIndex; i <= endIndex; i++)
        {
            Console.WriteLine(i.ToString());
        }
    }

      简单,当只需要运行时行为的时候,或者是不希望编辑器检查的时候,dynamic真是方便。

  • 相关阅读:
    & 微信支付对比
    # MySQL性能优化技巧
    & mysql简单定时增量全量备份
    & Mysql高级总结
    python面向对象
    django虚拟环境的安装
    Python 内置函数
    Python列表解析式
    函数练习
    Python装饰器
  • 原文地址:https://www.cnblogs.com/dxy1982/p/5412080.html
Copyright © 2020-2023  润新知