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