c#函数与方法

函数与方法

3.1 函数的基本概念

函数是一段可重用的代码,它接受输入参数,执行特定任务,并返回结果。函数能够帮助我们更好地组织代码并提高代码的可维护性。

3.2 方法的定义与调用

在C#中,函数通常被称为“方法”。以下是一个简单的方法示例:

public int Add(int a, int b)
{
    int sum = a + b;
    return sum;
}

3.3 参数与返回值

方法可以接受参数并返回值。参数是传递给方法的输入值,而返回值是方法执行后返回的结果。

3.3.1 值参数 vs. 引用参数

值参数传递的是参数的副本,而引用参数传递的是参数的地址。

using System;

namespace MyFirstConsoleApp
{
    class Program
    {
       static  void  ModifyValue(int x) {
            x = 10;
        }
        static void Main(string[] args) {


            int num = 5;
            ModifyValue(num); // num仍然是5
            Console.WriteLine(num);

        }
    }
}

这就是值专递

下面我们看引用传递

using System;

namespace MyFirstConsoleApp
{
    class Program
    {
       static  void  ModifyValue(ref int x) {
            x = 10;
        }
        static void Main(string[] args) {


            int num = 5;
            ModifyValue( ref  num); // num仍然是5
            Console.WriteLine(num);

        }
    }
}

加上ref后函数传参就是引用类型,指向的是同一个内存地址,不是副本。

打个比如:

假设你有一个魔法帽子,里面可以放一张纸条。这个纸条代表一个变量,它可以是数字、字符串或其他类型的数据。

值传值(Value Passing):

值传值就像你把一张纸条复制一份,然后把复制的纸条放进魔法帽子里。这样,魔法帽子里就有两张一模一样的纸条,但它们是独立的,互相不会影响。当你改变其中一张纸条上的内容时,不会影响另一张纸条的内容。在C#中,像基本数据类型(如int、float、char等)就是值传值的方式传递的。

引用传值(Reference Passing):

引用传值就像你把一张纸条放进魔法帽子里,然后把魔法帽子交给了另一个人。这个人也可以通过魔法帽子找到原来的那张纸条。无论你改变魔法帽子里的纸条内容,还是那个人改变魔法帽子里的纸条内容,都会影响到原来的那张纸条。在C#中,像类对象或数组这样的引用类型就是引用传值的方式传递的。

比喻解释:

在值传值中,函数得到的是变量的副本,对副本的修改不会影响原来的变量。就像复制了一份纸条,对复制的纸条进行修改,不会改变原来的纸条。

而在引用传值中,函数得到的是变量的引用,对引用的修改会直接影响原来的变量。就像把纸条放入魔法帽子,通过魔法帽子修改纸条的内容,会影响到原来的纸条。

3.3.2 可选参数与命名参数

您可以在方法中使用可选参数和命名参数,以使方法调用更加灵活。

using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static void PrintInfo(string name, int age = 25) {
            Console.WriteLine($"Name: {name}, Age: {age}");
        }



        static void Main(string[] args) {

            PrintInfo("John"); // 使用默认值25
            PrintInfo("Alice", 30); // 指定年龄为30
        }
    }
}


3.4 方法重载与泛型方法

方法重载允许您在同一类中定义多个同名方法,但参数类型或数量不同。

int Add(int a, int b)
{
    return a + b;
}

double Add(double a, double b)
{
    return a + b;
}


泛型方法允许您编写能够处理不同数据类型的方法。

using System;

namespace MyFirstConsoleApp
{
    class Program
    {
        static T GetMax < T > (T a, T b) where T: IComparable < T >
        {
            return a.CompareTo(b) > 0 ? a: b;
        }


        static void Main(string[] args) {

            int maxInt = GetMax(5, 10);
            Console.WriteLine(maxInt);
            double maxDouble = GetMax(3.14, 2.71);
            Console.WriteLine(maxDouble);

        }
    }
}

网友评论0