網站首頁 編程語言 正文
在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
相關推薦
- 2022-08-21 Android貝塞爾曲線實現加入購物車拋物線動畫_Android
- 2022-09-19 ASP.NET?Core模仿中間件方式實現列表過濾功能_實用技巧
- 2022-11-18 阿里云kubernetes查找鏡像中jar包的方法(docker查看鏡像中的jar)_云其它
- 2022-12-24 Docker自定義網絡詳解_docker
- 2023-04-24 NumPy矩陣乘法的實現_python
- 2023-04-26 Sklearn調優之網格搜索與隨機搜索原理詳細分析_python
- 2022-05-03 詳解Python利用APScheduler框架實現定時任務_python
- 2022-07-27 SQL解決未能刪除約束問題drop?constraint_MsSql
- 最近更新
-
- 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同步修改后的遠程分支