C# 中,方法重载(Method Overloading)是一种强大的特性,可以在同一个类中定义多个同名方法,只要它们的参数列表不同即可。可以根据不同的参数类型或数量来调用不同的方法实现,从而提高代码的灵活性和可读性。本文主要介绍C# 类的方法的重载。

1、方法 重载

使用方法重载时,多个方法可以使用不同的参数使用相同的名称:

例如:

int MyMethod(int x)
float MyMethod(float x)
double MyMethod(double x, double y)

下面的示例是两个两种不同类型数字的方法:

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static int PlusMethodInt(int x, int y) 
        {
          return x + y;
        }

        static double PlusMethodDouble(double x, double y)
        {
          return x + y;
        }

        static void Main(string[] args)
        {   
          int myNum1 = PlusMethodInt(8, 5);
          double myNum2 = PlusMethodDouble(4.3, 6.26);
          Console.WriteLine("int: " + myNum1);
          Console.WriteLine("double: " + myNum2);
        }
    }
}

与其定义应该执行相同操作的两个方法,不如重载一个方法。

在下面的示例中,我们重载了PlusMethod方法,使其同时适用于intdouble

例如:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
      
        static int PlusMethod(int x, int y)
        {
         return x + y;
        }

        static double PlusMethod(double x, double y) 
        {
         return x + y;
        }

        static void Main(string[] args)
        {   
          int myNum1 = PlusMethod(8, 5);
          double myNum2 = PlusMethod(4.3, 6.26);
          Console.WriteLine("int: " + myNum1);
          Console.WriteLine("double: " + myNum2);
        }
    }
}

注意:只要参数的数量或类型不同,多个方法就可以具有相同的名称。

2、通过参数个数不同

C# 方法重载时区分方法签名(Method Signature),而方法签名包含方法名称和参数列表。当参数个数不同时,方法签名不同,因此可以成功重载。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        // 只有一个参数
        public void Print(int a)
        {
            Console.WriteLine("整数: " + a);
        }

        // 两个参数
        public void Print(int a, int b)
        {
            Console.WriteLine("两个整数: " + a + " 和 " + b);
        }

        static void Main()
        {
            Program obj = new Program();
            obj.Print(5);       // 调用 Print(int a)
            obj.Print(10, 20);  // 调用 Print(int a, int b)
        }
    }
}

3、通过参数类型不同

方法重载(Method Overloading)可以通过参数类型不同来实现,即方法的名称相同,但参数的类型不同,从而让编译器在调用时能够区分不同的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        public void Display(int a)
        {
            Console.WriteLine("整数: " + a);
        }
    
        public void Display(double b)
        {
            Console.WriteLine("浮点数: " + b);
        }
    
        static void Main()
        {
            Program obj = new Program();
            obj.Display(5);    // 调用 Display(int a)
            obj.Display(3.14); // 调用 Display(double b)
        }
    }
}

4、通过参数顺序不同

C# 方法重载(Method Overloading)中,可以通过参数顺序不同来实现多个方法的重载。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
         public void Show(int a, string b)
         {
             Console.WriteLine("整型: " + a + ", 字符串: " + b);
         }
     
         public void Show(string b, int a)
         {
             Console.WriteLine("字符串: " + b + ", 整型: " + a);
         }
     
         static void Main()
         {
             Program obj = new Program();
             obj.Show(10, "Hello");  // 调用 Show(int, string)
             obj.Show("World", 20);  // 调用 Show(string, int)
         }
    }
}

推荐文档