C# 之值类型与引用类型参数[基础]
根据参数类型和传递方式,有以下4种不同的情况:
值类型参数的按值传递; (int m)
引用类型参数的按值(地址值)传递; (string str)
值类型参数的按引用传递; (ref int m)
引用类型参数的按引用传递; (ref string str)

class Demo
{
static void Main(string[] args)
{
int n = 100;
string str = "One";
ChangeByValue(ref n); // 值类型:ref 传递的是变量 n 的地址(即:值类型的地址)
ChangeByRef(ref str); //引用类型:ref 传递的是变量 str 的地址(即:引用的引用)
Console.WriteLine(n);
Console.WriteLine(str);
}
private static void ChangeByValue(ref int m)
{
m = 200; //实际上改变的是变量 n 的值
}
private static void ChangeByRef(ref string s)
{
s = "Two";
}
//通过,参数带ref(或out),与不带ref(或out)的方法能实现方法的重载
private static void ChangeByRef(string s)
{
s = "Two";
}
// 报错:不能定义仅在 ref 和 out 上有差别的重载方法。
// 原因:在MSIL中, ref 和 out 是同一类型。
/* private static void ChangeByRef(out string s)
{
s = "Two";
}
*/
}
{
static void Main(string[] args)
{
int n = 100;
string str = "One";
ChangeByValue(ref n); // 值类型:ref 传递的是变量 n 的地址(即:值类型的地址)
ChangeByRef(ref str); //引用类型:ref 传递的是变量 str 的地址(即:引用的引用)
Console.WriteLine(n);
Console.WriteLine(str);
}
private static void ChangeByValue(ref int m)
{
m = 200; //实际上改变的是变量 n 的值
}
private static void ChangeByRef(ref string s)
{
s = "Two";
}
//通过,参数带ref(或out),与不带ref(或out)的方法能实现方法的重载
private static void ChangeByRef(string s)
{
s = "Two";
}
// 报错:不能定义仅在 ref 和 out 上有差别的重载方法。
// 原因:在MSIL中, ref 和 out 是同一类型。
/* private static void ChangeByRef(out string s)
{
s = "Two";
}
*/
}
作者: XuGang 网名:钢钢 |
出处: http://xugang.cnblogs.com |
声明: 本文版权归作者和博客园共有。转载时必须保留此段声明,且在文章页面明显位置给出原文连接地址! |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架