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真是方便。

原文地址:https://www.cnblogs.com/dxy1982/p/5412080.html