網站首頁 編程語言 正文
簡介:
In:過程不會改寫In的內容 ,默認的傳遞方式,即向函數內部傳送值。
Out和out:傳入的值不會被過程所讀取,Out在傳入的時候,參數的數值會清空,但過程可以寫 。只出不進
ref:可以把參數的數值傳遞進函數 ,過程會讀,會寫 。有進有出。
一、In
In 關鍵字使參數按值傳遞。即向函數內部傳送值。
例如:
using System;
class gump
{
public double square(double x)
{
x=x*x;
return x;
}
}
class TestApp
{
public static void Main()
{
gump doit=new gump();
double a=3;
double b=0;
Console.WriteLine(\"Before square->a={0},b={1}\",a,b);//a=3,b=0;
b=doit.square( a);
Console.WriteLine(\"After square->a={0},b={1}\",a,b);//a=3,b=9;
}
}
二、ref
ref?關鍵字使參數按引用傳遞。其效果是,當控制權傳遞回調用方法時,在方法中對參數的任何更改都將反映在該變量中。若要使用?ref?參數,則方法定義和調用方法都必須顯式使用?ref?關鍵字。
例如:
using System;
class gump
{
public double square(double x)
{
x=x*x;
return x;
}
}
class TestApp
{
public static void Main()
{
gump doit=new gump();
double a=3;
double b=0;
Console.WriteLine(\"Before square->a={0},b={1}\",a,b);//a=3,b=0;
b=doit.square( ref a);
Console.WriteLine(\"After square->a={0},b={1}\",a,b);//a=9,b=9;
}
}
傳遞到?ref?參數的參數必須最先初始化。這與?out?不同,后者的參數在傳遞之前不需要顯式初始化。
三、out
out?關鍵字會導致參數通過引用來傳遞。這與?ref?關鍵字類似,不同之處在于?ref?要求變量必須在傳遞之前進行初始化。若要使用?out?參數,方法定義和調用方法都必須顯式使用out?關鍵字。
using System;
class gump
{
public void math_routines(double x,out double half,out double squared,out double cubed)
//可以是:public void math_routines(ref double x,out double half,out double squared,out double cubed)
//但是,不可以這樣:public void math_routines(out double x,out double half,out double squared,
//out double cubed),對本例來說,因為輸出的值要靠x賦值,所以x不能再為輸出值
{
half=x/2;
squared=x*x;
cubed=x*x*x;
}
}
class TestApp
{
public static void Main()
{
gump doit=new gump();
double x1=600;
double half1=0;
double squared1=0;
double cubed1=0;
[Page]
/*
double x1=600;
double half1;
double squared1;
double cubed1;
*/
Console.WriteLine(\"Before method->x1={0}\",x1);
Console.WriteLine(\"half1={0}\",half1); Console.WriteLine(\"squared1={0}\",squared1);
Console.WriteLine(\"cubed1={0}\",cubed1);
doit.math_rountines(x1,out half1,out squared1,out cubed1);
//此時的Out修飾的參數值均已經發生改變。
Console.WriteLine(\"After method->x1={0}\",x1);
Console.WriteLine(\"half1={0}\",half1);
Console.WriteLine(\"squared1={0}\",squared1);
Console.WriteLine(\"cubed1={0}\",cubed1);
}
}
盡管作為?out?參數傳遞的變量不必在傳遞之前進行初始化,但需要調用方法以便在方法返回之前賦值。
class OutExample
{
static void Method(out int i)
{
i = 44;
}
static void Main()
{
int value;
Method(out value);
// value is now 44
}
}
四、區別:
1.ref和out的區別在C# 中,既可以通過值也可以通過引用傳遞參數。通過引用傳遞參數允許函數成員更改參數的值,并保持該更改。若要通過引用傳遞參數, 可使用ref或out關鍵字。ref和out這兩個關鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。
2.使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。
3.使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。
4.out適合用在需要retrun多個返回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。
5.方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞回調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。
原文鏈接:https://www.cnblogs.com/wml-it/p/14776395.html
相關推薦
- 2023-02-06 C#實現對文件進行加密保護的示例代碼_C#教程
- 2022-04-09 windows一鍵啟動多個bat批處理文件或者啟動多個cmd窗口執行命令
- 2022-05-13 Shell腳本命令結果保存到變量,保留換行符
- 2022-09-25 Windows 10主機上的VMware Workstation出現“VMware Workstat
- 2023-02-05 C語言模擬實現memmove的示例代碼_C 語言
- 2023-03-28 深入了解Android中GestureDetector的定義與使用_Android
- 2023-09-12 gradle和maven打包時排除application.properties
- 2022-07-02 Pandas?如何處理DataFrame中的inf值_python
- 最近更新
-
- 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同步修改后的遠程分支