C#學習筆記三:類初步相關知識要點(1) (轉)
:namespace prefix = o ns = "urn:schemas--com::office" />
附加說明:寫關於class之類的東西是最枯燥的,本文只是保證筆記的完整性,如果你已經很熟悉,就無需浪費時間。
常量欄位與靜態欄位的比較:
常量欄位(const)的值是在編譯時設定的,只讀欄位(readonly)是在執行時設定的。
只讀欄位加上static可以無需對類進行例項化從而直接引用。
const 和static readonly均可直接引用,那麼其區別在哪裡呢?請看一個理解兩者關係的經典的msdn的例子:
using System;
namespace Program1
{
public class Utils
{
public static readonly int X = 1;
}
}
namespace Program2
{
class Test
{
static void
Console.WriteLine(Program1.Utils.X);
}
}
}
Program1 和 Program2 名稱空間表示兩個單獨編譯的。由於 Program1.Utils.X 宣告為靜態只讀欄位,因此 Console.WriteLine 語句要輸出的值在編譯時是未知的,直到在執行時才能獲取。這樣,如果更改 X 的值並重新編譯 Program1,則即使 Program2 未被重新編譯,Console.WriteLine 語句也將輸出新值。但是,假如 X 是常數,X 的值將在編譯 Program2 時獲取,並且在重新編譯 Program2 之前不會受到 Program1 中的更改的影響。
我相信,上面解釋得很清楚了。但當我們同時可以用以上兩種方法初始化欄位時,我們希望知道兩種方法的問題。剛開始我們曾經說過,常量是編譯時設定的,也就是形成硬編碼保持在PE(或DLL)中,而只讀靜態欄位是在執行時設定的,也就是說,當有大量值需要設定的時候,常量欄位更有優勢。當然,同上篇討論裝箱和拆箱一樣,對效能的影響是比較小的。
方法引數:關於值傳遞(by value)和引用傳遞(by reference)的討論
一、首先我們討論最簡單的情形(by value 不使用ref和out關鍵字的情形)。
1.值傳遞值型別的方法引數,是將值的一個副本傳遞給方法,不影響傳遞的變數。
2.引用傳遞的是引用的一個副本(對相同資料的另一個引用,這裡我們幾乎可以把它看作C++裡面的“指標”),因此,此時對引數的修改就是對原始資料進行的。關於2,一個簡單的例子增強我們感性認識。
class AnotherClass
{
public int ID;
}
class SomeClass
{
public AnotherClass Change(AnotherClass ref1)
{
ref1.ID = ref1.ID*2;
return ref1;
}
}
當我們以下方法時:ref1.ID和ref2ID均為6。
notherClass ref1 = new AnotherClass();
ref1.ID = 3;
AnotherClass ref2 = sc.ChangeObject(ref1);
二、透過引用(by reference)傳遞值型別(value type):
ref方法引數:可以改變值,呼叫方法前必須初始化變數,在方法中無需對引數進行設定(賦值)。
out方法引數:可以改變值,呼叫方法前不需初始化變數,在方法中必須對傳遞的引數進行設定(賦值)。
三、透過引用(by reference)傳遞引用型別(reference type):
out引數同上一樣必須在方法中設定(賦值)。
其餘和透過值傳遞引用型別(以上討論的情形一)一樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998149/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- <react學習筆記(5)>知識點回顧(1)React筆記
- React學習筆記知識點整理React筆記
- Workerman學習筆記(一)初步認識筆記
- Promise學習筆記(知識點 + 手寫Promise)Promise筆記
- C++基礎知識學習筆記(1)C++筆記
- GO 學習筆記 《1. 基礎知識》Go筆記
- redis相關知識點Redis
- Git相關知識點Git
- GC相關知識簡單學習GC
- JVM相關知識整理和學習JVM
- 學習記錄 -- 知識點
- Python學習筆記—day1—基礎知識Python筆記
- LTE-5G學習筆記1---記憶要點筆記
- TS學習筆記(三):類筆記
- 【學習】MySQL基礎知識要點-001MySql
- 基礎知識學習筆記筆記
- 《機器學習初步》筆記機器學習筆記
- 【linux】Linux程式相關知識學習整理Linux
- TCP學習筆記(二) 相識篇TCP筆記
- LR模型相關知識點模型
- 【Java】容器相關知識點Java
- ivar layout 相關知識點
- C++學習筆記,知識點+程式碼測試C++筆記
- 《圖解HTTP》學習筆記(附帶WebSocket知識點)圖解HTTP筆記Web
- 我的C#學習筆記1C#筆記
- 機器學習學習筆記——基本知識機器學習筆記
- spring boot學習簡要筆記1Spring Boot筆記
- 機器學習知識點整理(三)機器學習
- Vlan相關知識雜記
- 抽象類特點 學習筆記抽象筆記
- React相關知識點:關於ReduxReactRedux
- 王昊奮知識圖譜學習筆記--第三講知識抽取與知識挖掘(上)筆記
- vim學習筆記——三種基本模式和相關操作筆記模式
- RxJava 學習筆記 -- 基礎知識RxJava筆記
- C#學習筆記--資料結構、泛型、委託事件等進階知識點C#筆記資料結構泛型事件
- Redis基礎知識(學習筆記15--持久化 (1))Redis筆記持久化
- Redis基礎知識(學習筆記8--Redis命令(1))Redis筆記
- 生物知識點筆記筆記
- 信管知識梳理(三)軟體工程相關知識軟體工程