讀【157個完美化C#的建議】一書的理解筆記 - 006
重點: 程式有彈性用readonly,要效率用const
※ 書中建議const帶來的效益不明顯,程式還是以彈性為導向
流程說明 |
1. Const |
2. Readonly |
3. 分析 |
4. 結論 |
1. Const
以下範例,設定Value 為 const 值為Hello
const string Value = "Hello";
private void Form1_Load(object sender, EventArgs e)
{
//=== const 部分 ====
string setTalk = Value;
Console.WriteLine(setTalk);
//實際上邊一時為
Console.WriteLine("Hello");
}
實際上 Value 在編譯期會變為以下,像C++ 的#DEFINE (巨集) ,編譯時將對應的常數強制替換,故效能快
Console.WriteLine("Hello");
2. Readonly
Readonly分兩種,以下範例
1: 基底型別的Readonly
宣告以下(Int 基底型別為例)
//=== Readonly 部分 1 : 宣告
//基底型別 的不可改變
readonly int ReadOnlyValue = 100;
不可以改變值,只有在編譯前賦予指定的值
//ReadOnlyValue = 100;無法指定賦予值
2: 參考型別的Readonly
我們有以下宣告 (myClass)
public class myClass {
//Field
readonly int score = 10;
/// <summary>
/// 建構式 - 賦予Readonly值
/// </summary>
/// <param name="input"></param>
public myClass(int input)
{
this.score = input;
}
/// <summary>
/// 建構式 - 無參數
/// </summary>
/// <param name="input"></param>
public myClass()
{
}
}
參考型別提供了在編譯運行時的設定Readonly值。
//參考型別 的不可改變
myClass itemA = new myClass();
//參考型別建構式 - 可以賦予內部的readonly屬性值
myClass itemB = new myClass(1234);
3. 分析兩者
基本型態 |
程式編譯差別 |
應用型別 |
用途 |
|
Readonly | 非靜態 | 運行時常量 | 任意 | 設計彈性 |
Const | 靜態 Static | 編譯期常量 | 基底型別(int 、 string、double等)、enum | 效能取向 |
4. 結論
在基底型別的readonly 靜態傅值 與Const宣告相等,不可以變動的量。
但在參考型別上readonly的具有可彈性
const string Value = "Hello";
static readonly string Value = "Hello";//同上面一行
程式有彈性用readonly,要效率用const
github連結(Vs2015) : 點我下載