橫眉冷對千夫指,俯首甘為孺子牛。首先明確c#兩大資料型別分別是值型別資料和引用型別資料。
值型別資料:直接儲存其值,儲存在堆疊當中(stack),變數間賦值是值拷貝。
值型別:
整型:byte(0~255),sbyte(-128~127),short,ushort,int,uint,long,ulong
浮點型別:float,double
bool型別:bool
字元型別:char
列舉(enum),結構(struct)
引用型別:
object(所有的類的基類是object),string,類等等
ref引數:
我們都知道上述**執行,結果肯定是100。變數的有效性是有作用域的,c本身只在main方法中起作用。但是我們可以通過引用傳遞值型別,新增ref修飾符,使得可以傳遞c物件本身。
這裡為什麼說是c物件本身,而不是c的值呢?
因為假如c是類,引用型別,在方法外是可以更改傳遞過來的物件裡面的屬性的,但無法更改其指向的引用物件的位址。下面舉例說明
大家覺得,輸出結果會是多少呢?
答案是2,而不是3.如下圖所示
未呼叫方法之前,棧中a存入的是相對應在堆中的引用位址,呼叫更改值的方法時,更改了其x的值,但是new 只是在堆中新建了一塊記憶體空間,因為傳遞過來的只是乙個引用,並不是物件本身,並不能改變其指向位址,所以方法結束之後,new的物件就被**了。
這時加上ref關鍵字,就可傳遞a物件本身。如下圖,輸出結果為3.
out引數:
如果方法返回多個值,可能型別還不同,該怎麼辦?這裡有不同的選項。第一種就是定義dto,將要返回的全部定義為model的成員;第二種就是使用元組型別:tuple;第三種就是使用out關鍵字。
tuple元組:
out引數:
c變數不需要預先初始化,但是在方法內必須賦值,而ref則不必一定要在方法內賦值。
c 基礎學習雜記(二)
1。c 中結構體可以用new在棧裡分配結構體空間,也可以直接宣告變數就算分配空間,如 struct point point pt1 new point point pt2 這兩種方式的區別是,用new會將point中的字段初始化為0,而不用new則不會,在使用前還需要初始化變數,c 規定變數初始化以...
Python基礎雜記
1 地板除 2 字串不轉義 r 表示字串 不轉義 3 elif意思為else if 4 isinstance obj,class or tuple 判斷obj是否符合後面的型別 5 乘方運算子 數學方法 pow x,y 和pow x,y,z abs x 求絕對值 max a,b,c 返回一組數中的最...
c 學習雜記
概念 物件 object 類 class 物件導向 由類組成 是以介面形式存在 易於移植 可以將每乙個變數都看作是物件 每一種資料型別都可以看做是類 類中分為 public protected private 公有 保護 私有 變數 公有變數 任何人都可以訪問 保護變數 自己與自己派生 繼承的都可以...