上一篇就結構的性能、局限性以及它和類的比較作了簡單的描述,這篇我將接著介紹在使用結構時應該注意和把握的原則:
通過上篇的介紹,我們可以很自然的意識到結構在效率上的優越性(相對於類),這主要歸因於它們在底層的值類型結構。
不過,它們的對於大容量數據和復雜度高的算法進行處理時所表現出來的局限性,使得它的適用范圍大受限制。那我們在什麼情
況下使用結構才能不受指責和嘲笑呢?
1、如果你正在從事圖像色彩或是固定模式的業務處理程序的設計,或者你在設計對象群時,需要面對大量結構簡單且狀態
信息比較少的對象時,我建議你最好選用結構類型來構造這些小規模數據體。
2、由於結構的原型是值類型,所以它整個被定義為一個數據,所以不要試圖在結構裡構造過多的方法,最好是能不定義方
法,就盡量避免。
我們來看以下微軟提供的一個最具代表性的例子: RGB結構
using System;
/// <summary>
/// RGB結構
/// </summary>
struct RGB
{
public static readonly RGB RED = new RGB(255,0,0);
public static readonly RGB GREEN = new RGB(0,255,0);
public static readonly RGB BLUE = new RGB(0,0,255);
public static readonly RGB WHITE = new RGB(255,255,255);
public static readonly RGB BLACK = new RGB(0,0,0);
public int Red;
public int Green;
public int Blue;
public RGB(int red,int green,int blue)
{
Red = red;
Green = green;
Blue = blue;
}
public override string ToString()
{
return (Red.ToString("X2") + Green.ToString("X2") + Blue.ToString("X2"));
}
}
public class Struct
{
static void OutPutRGBValue(string color,RGB rgb)
{
Console.WriteLine("The Value for {0} is {1}",color,rgb);
}
static void Main(string[] args)
{
OutPutRGBValue("red",RGB.RED);
OutPutRGBValue("green",RGB.GREEN);
OutPutRGBValue("blue",RGB.BLUE);
OutPutRGBValue("white",RGB.WHITE);
OutPutRGBValue("black",RGB.BLACK);
}
}
以上的例子中我們定義了一個結構和靜態字段,這樣做使我們存儲的效率提高了;使用上又方便了用戶,畢竟記住一個
RGB(255,100,255) 要比記住一個“草淺蘭” 要困難的多;由於靜態成員的加盟,使得每個RGB鍵值對於整個系統只用定義
一次,這樣使用起來其高效性和方便性都是顯而易見的。