cpout引腳是幹什麼的 out和ref詳解

2021-10-20 11:19:04 字數 3274 閱讀 8159

1   概述

根據個人經驗,充分理解out和ref的前提是了解值型別和引用型別的傳遞過程,因此本篇文章先介紹值型別和引用型別,再結束out和ref。

2   值型別和引用型別

2.1   值型別

(1)值型別code

通過值的方式來傳遞,即實際引數向形式引數傳遞(關於形參和實參術語,這裡不定義),主要儲存在棧中。通過值傳遞,copy副本形式,呼叫棧的pop()和push()方法來實現。 常見型別:int,float,bool,enum,struct,array等。

例子:1 //主函式

2 static void main(string args)3 ,n2=", n1, n2);//n1=10,n2=20

8 swap(n1,n2);9 console.writeline("交換後n1和n2的值");10 console.writeline("n1=,n2=",n1,n2);//n1=10,n2=20

11 console.read();12 }13

14 ///

15 ///交換兩個變數的值16 ///

17 /// 形參n1

18 /// 形參n2

19 static private void swap(int t1,intt2)20

(2)值型別分析

以上**,通過值傳遞,交換兩個變數後,並沒有改變n1和n2的值,根本原因是,值傳遞是通過copy副本形式,不改變原值。圖如下:

a.定義變數n1和n2,並初始化變數,在記憶體中的表示大致如下( int n1 = 10, n2 = 20;)

code除錯

在記憶體中表示

b.執行交換變數方法時

code除錯

在記憶體中表示

交換詳細步驟示意圖

2.2  引用型別

(1) 引用型別code

引用型別通過位址來傳遞,如c++中的指標。通俗地講,把位址當作開門的鑰匙即可,主要儲存在堆中。通過位址來傳遞,共享變數,乙個改變,所有改變,常見型別有string,object等。

1 : 定義控制台應用程式的入口點。2 //3

4 #include "stdafx.h"

6 //主函式

7 int _tmain(int argc, _tchar*ar**)8 19 //交換函式

(2)分析

示意圖

3    out和ref

3.1  為什麼引入out和ref

由以上分析可知,值傳遞是無法改變變數的值的,若要像c++一樣,改變變數的值,該怎麼辦?c#引入了out和ref來解決該問題。因此,out和ref均屬於引用型別。

3.2  out詳解

(1)例子

//主函式

static void main(string args)

//out引數

static public int getsum(out int numberfirst,out intnumbersecond)

numberfirst= 10;

numbersecond= 3;return numberfirst +numbersecond;

result:

(2)out特點

a.out只出不進;

b.方法定義和呼叫方法都必須顯示使用out關鍵字(如上**顯然易見);

c.out只出不進,即具有清空方法體外引數功能(如上**,讀者可以任意改變n1和n2的值,只要不改變getsum()方法體,輸出的值均為13);

d.為引用型別(直接呼叫而不事先定義n1和n2,編譯不通過);

e.同名函式,out不與ref同時存在,可以過載;

//如下兩個方法可以過載

public void getnumer(intnum){}public void settime(out int num)

//如下兩個方法不能過載

public void getnumer(ref int num)

public void settime(out int num)

3.3  ref詳解

(1)例子

//主函式

static void main(string args)

//ref引數

static public int refgetsum(ref int numberfirst, ref intnumbersecond)

numberfirst= 10;

numbersecond= 3;return numberfirst +numbersecond;

(2)ref特點

a.有進有出;

b.方法定義和呼叫方法都必須顯示使用ref關鍵字(如上**顯然易見);

c.ref有進有出,即可以把值傳入方法體內(如上**,讀者可以任意改變n1和n2的值);

d.為引用型別(直接呼叫而不事先定義n1和n2,編譯不通過);

e.同名函式,out不與ref同時存在,可以過載;

3.4  out與ref比較

out只輸出,ref有進有出。

4   版權

博主**:

FFT是幹什麼的

fft在演算法競賽中就有乙個用途 加速多項式乘法 暴言 簡單來說,形如 a0x0 a1x1 a2x2 anxna0x0 a1x1 a2x2 anxn 的代數表示式叫做多項式,可以記作f x a0x0 a1x1 a2x2 anxnf x a0x0 a1x1 a2x2 anxn,其中a0,a1,ana0...

npm是幹什麼的

網上的 npm 教程主要都在講怎麼安裝 配置和使用 npm 卻很少告訴新人 npm 是幹什麼的?為什麼要使用 npm?今天我就來講講這個話題。本文目標讀者是 不太了解 npm 的新人 老司機請繞道。社群共享 麻煩npm的思路大概是這樣的 這些可以被使用的 被叫做 包 package 這就是 npm名...

HttpContext是幹什麼的

httpcontext 類.包括說明和如何使用.於是,上網狂搜 有網路就是好啊.這是我補充的httpcontext 類 1.生存週期 從客戶端使用者點選並產生了乙個向伺服器傳送請求開始 伺服器處理完請求並生成返回到客戶端為止.注 針對每個不同使用者的請求,伺服器都會建立乙個新的httpcontext...