浅析C# 函数的传值与传址

浅析C# 函数的传值与传址

在C#中,函数的传参有两种方式:传值和传址。这两种传参方式的作用是不一样的,下面我们将进行详细讲解。

传值(值类型)

值类型是指像int、float、char、bool等结构体(struct)类型,这些类型是分配在栈内存上的数据类型。当我们把一个值类型的变量传递给一个函数时,实际上是传递了这个变量的值的副本,即该变量的一个复制品。因为是复制品,所以在函数内部对该变量进行修改不会对原变量产生任何影响。

示例1:

public void ChangeValue(int value)
{
    value = 10;
}

int num = 5;
ChangeValue(num);
Console.WriteLine(num); // 输出结果为5

在上例中,我们定义了一个函数ChangeValue,该函数的参数是一个int类型的变量value。 在主函数中我们创建了一个int类型的变量num,为其赋值为5。接着,我们调用ChangeValue函数,并将num作为参数进行传递。在ChangeValue函数内部,我们修改了value的值为10。 但是,在输出num的值时我们发现输出结果为5,这说明在函数中修改value并不会影响到num的值。

示例2:

public void ChangeArray(int[] arr)
{
    arr[0] = 10;
}

int[] array = new int[] { 1, 2, 3 };
ChangeArray(array);
Console.WriteLine(array[0]); // 输出结果为10

在上例中,我们定义了一个函数ChangeArray,该函数的参数是一个int类型的数组arr。 在主函数中我们创建了一个int类型的数组array,并为其赋值为{1,2,3}。接着,我们调用ChangeArray函数,并将array作为参数进行传递。在ChangeArray函数内部,我们修改了arr的第一个元素的值为10。 在输出array的第一个元素时我们发现输出结果为10,这说明在函数中修改arr影响到了array的第一个元素。

传址(引用类型)

引用类型是指像string、object、class等类(class)类型,这些类型是在堆内存上分配的数据类型,传参的时候实际上传递的是变量在内存中的地址,即指向该对象的指针。因为传递的是地址(指针),所以在函数内对该变量进行修改,会影响到原变量。

示例1:

public void ChangeString(string str)
{
    str = "world";
}

string hello = "hello";
ChangeString(hello);
Console.WriteLine(hello); // 输出结果为hello

在上例中,我们定义了一个函数ChangeString,该函数的参数是一个string类型的变量str。 在主函数中我们创建了一个string类型的变量hello,并为其赋值为"hello"。 接着,我们调用ChangeString函数,并将hello作为参数进行传递。在ChangeString函数内部,我们修改了str的值为"world"。 但是,在输出hello的值时我们发现输出结果仍然为"hello",这说明在函数中修改str并不会影响到hello的值。

示例2:

public void ChangeList(List<int> list)
{
    list[0] = 10;
}

List<int> numList = new List<int> { 1, 2, 3 };
ChangeList(numList);
Console.WriteLine(numList[0]); // 输出结果为10

在上例中,我们定义了一个函数ChangeList,该函数的参数是一个List类型的变量list。 在主函数中我们创建了一个List类型的变量numList,并为其赋值为{1,2,3}。 接着,我们调用ChangeList函数,并将numList作为参数进行传递。在ChangeList函数内部,我们修改了list的第一个元素的值为10。在输出numList的第一个元素时我们发现输出结果为10,这说明在函数中修改list影响到了numList的第一个元素。

总结

C#函数的参数传递方式有两种:值传递和引用传递。对于值类型的参数,采用值传递方式,函数内部无法修改原变量的值;而引用类型的参数,采用引用传递方式,因为传递的是变量的地址,所以函数内部对变量的修改会影响到原变量。了解这些知识,在实际开发中可以更灵活地运用函数的参数传递方式,提高程序的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析C# 函数的传值与传址 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C# SqlHelper应用开发学习

    C# SqlHelper应用开发学习攻略 1. 学习SqlHelper类 SqlHelper是C#中常用的操作数据库的工具类。学习SqlHelper需要掌握以下几个方面: SqlHelper的基本用法,包括连接数据库、执行SQL语句等; SqlHelper的扩展方法,包括重载的ExecuteNonQuery、ExecuteScalar等; SqlHelper…

    C# 2023年6月2日
    00
  • C#使用SqlServer作为日志数据库的设计与实现

    C#使用SqlServer作为日志数据库的设计与实现,可以采用以下步骤: 1. 创建数据库表格 首先在SqlServer中创建一个数据库,并在其中创建一个用于存储日志的表格。例如: create table LogInfo( ID int identity(1,1) primary key, LogContent nvarchar(4000) not nul…

    C# 2023年5月15日
    00
  • 使用 HttpReports 监控 .NET Core 应用程序的方法

    在本攻略中,我们将详细讲解如何使用HttpReports监控.NET Core应用程序,并提供两个示例说明。 什么是HttpReports? HttpReports是一个基于.NET Core的开源应用程序性能监控工具,可以监控应用程序的性能指标、请求响应时间、错误率等。HttpReports提供了一个Web界面,可以方便地查看应用程序的性能数据。 使用Ht…

    C# 2023年5月16日
    00
  • C#生成唯一值的方法汇总

    生成GUID GUID是一种可以用于生成全球唯一标识符的算法,具有足够的随机性和唯一性。在C#中可以通过Guid.NewGuid()方法生成GUID。 Guid guid = Guid.NewGuid(); string uniqueId = guid.ToString(); 通过时间戳生成唯一值 根据当前时间计算其与一个固定日期之间的时间间隔的毫秒数,将其…

    C# 2023年6月1日
    00
  • C#实现身份证验证功能的示例代码

    下面是“C#实现身份证验证功能的示例代码”的完整攻略。 步骤一:身份证校验规则 身份证号码是由18位数字和字母X组成的字符串,其中第18位可能为字母X。校验规则如下: 所有大写字母必须转换为小写字母。 前17位必须是数字。 最后一位可以是数字(0-9)或字母X。 身份证号码的长度必须是18位。 步骤二:实现身份证验证代码 在这一步骤中,我们将通过示例代码实现…

    C# 2023年6月1日
    00
  • C# DatagridView常用操作汇总

    C# DataGridView常用操作汇总 前言 在C# Winform应用程序开发中,DataGridView是一个非常实用的控件,它可以用来显示和编辑数据,而且比起ListView控件来说更加灵活,功能更加丰富。在本攻略中,我们会介绍DataGridView控件的常用操作,包括如何绑定数据源、如何设置单元格样式、如何实现排序过滤和单元格合并等。 绑定数据…

    C# 2023年5月15日
    00
  • C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法

    C# 中实现输入汉字获取其拼音,通常有两种方法: 1.使用第三方库 pinyin4net pinyin4net 是一个流行的 C# 第三方库,用于将汉字转化为拼音。其基于 python 编写,提供了简单易用的 API。 安装过程 可以通过 NuGet 安装 pinyin4net 包,也可以直接到官网下载源代码。 具体安装步骤: 在 Visual Studio…

    C# 2023年6月7日
    00
  • C#实现强制关闭当前程序进程

    下面我将详细讲解一下“C#实现强制关闭当前程序进程”的完整攻略。 方案一:使用Process.Kill方法 可以使用Process.Kill()方法来强制关闭指定进程。需要先获取要关闭的进程的Process实例。示例代码如下: Process curProcess = Process.GetCurrentProcess(); // 获取当前进程 curPro…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部