網站首頁 編程語言 正文
在C#中,如果在方法參數前面加上ref關鍵字,說明參數傳遞的是引用,而不是值。如何理解呢?
參數是簡單類型的例子
static void Main(string[] args)
{
string temp = "a";
Change(temp);
Console.WriteLine(temp);
ChangeByRef(ref temp);
Console.WriteLine(temp);
Console.ReadKey();
}
private static void Change(string temp)
{
temp = temp + "--changed";
}
private static void ChangeByRef(ref string temp)
{
temp = temp + "--refchanged";
}
輸出結果:
a
a--refchanged
- 在Change()方法中,雖然改變了temp的值,但方法沒有返回值,打印temp依然是初始值a;
- 在ChnageByRef()方法中,由于加上了關鍵字,雖然也沒有返回值,當改變temp的值后,temp的引用地址發生了改變,再次打印,temp的值為新的引用地址對應的值。
參數是類類型的例子
class Program
{
static void Main(string[] args)
{
Pet p = new Pet(){Age = 5};
Console.WriteLine("初始年齡是:{0}", p.Age);
ChangeAge(p);
Console.WriteLine("改變pet的屬性值后,年齡是:{0}", p.Age);
ChangeAgeByRef(ref p);
Console.WriteLine("改變pet引用地址后,年齡是:{0}", p.Age);
Console.ReadKey();
}
private static void ChangeAge(Pet p)
{
p.Age = 10;
}
private static void ChangeAgeByRef(ref Pet p)
{
p = new Pet(){Age = 20};
}
}
public class Pet
{
public int Age { get; set; }
}
輸出結果:
- 在ChangeAge()方法中,改變的是Pet實例的屬性值。
- 在ChangeAgeByRef()方法中,改變的Pet實例的引用地址。
總結
方法參數無論是簡單類型,還是類類型,當在其前加上ref關鍵字后,對參數的賦值,實際上是改變的是方法參數變量的引用地址。使用ref注意點:
- 使用帶ref的方法之前,需要給方法參變量賦上初始值
- 無論是定義方法還是使用方法,都要帶上關鍵字ref
原文鏈接:https://www.cnblogs.com/darrenji/p/3821313.html
相關推薦
- 2023-02-23 Go?routine使用方法講解_Golang
- 2022-10-30 數據庫加密字段進行模糊查詢詳解_數據庫其它
- 2022-10-20 Flutter?StatefulBuilder實現局部刷新實例詳解_Android
- 2022-03-28 Go實現用戶每日限額的方法(例一天只能領三次福利)_Golang
- 2023-05-24 Pytorch中retain_graph的坑及解決_python
- 2022-02-18 matplotlib的legend參數與設置
- 2022-07-03 C語言中二級指針解析(指向指針的指針)_C 語言
- 2022-03-19 Nginx純配置實現日志實時上報的思路與方法_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支