首先看看struct和class區別和相同點.
1.最大的不同在於資料類型不同,前者為實值型別,而後者為參考型別。
2.由於資料類型的不同,他們在記憶體中儲存的位置也不同,前者儲存在stack中,後者則Heap中;
3.由於儲存位置不同,存取速度就有很大差距.stack中資料肯定heap中要快很多.
4.class支援介面繼承,執行個體繼承,而struct只支援介面繼承.
...想不到了,先這樣吧.
5.除此之外,他們大體相同:只是關鍵字不同而已.
所以,通常我們把Struct叫做輕量級資料結構,可以用來傳輸資料,此時比class要方便快捷很多.當然這裡的資料應該是一些關聯性比較強的一些資料,不然的話,就會很奇怪。
看一個Demo:
class Class1
{
static void Main(string[] args)
{
int n=10;
myStruct[] structs=new myStruct[n];
for (int i = 0; i < n; i++)
{
structs[i].name = "ivan" + i;
structs[i].arrs = new string[] { "ss", "ddd" };
}
showData(structs);
}
private static void showData(myStruct[] mystructs)
{
for (int i = 0; i < mystructs.Length; i++)
{
Console.WriteLine(mystructs[i].name);
}
}
}
public struct myStruct
{
public string name;
public string[] arrs;
}
另外,還有一種情況,用struct十分方便:迴圈提交資料給資料庫的情況。
比如要把excel資料匯入db中,通常我們會先把excel資料讀出來,放在DataSet中,而後迴圈讀取其中資料,執行insert語句...,而更糟的是,我們的資料訪問是用web service實現的,那也就是說,程式會在短時間內頻繁的訪問server,調用web service,結果會怎麼樣哪?server會以為這個行為為攻擊行為,Deny...
所以,對於批量的資料匯入,通常要首先把資料“打包”,而後一次提交。
這個時候,struct就可以發揮作用了.
public struct MyInsert
{
public string TableName;
public string[] Fields;
public string[] FieldValues;
}
MyInsert[] Inserts = new MyInsert [5];
for (int i = 0; i < 5; i++)
{
MyInsert dbInsert = new MyInsert();
dbInsert.TableName = "EXAMPLE";
dbInsert.Fields = new string[] { "ID", "NAME", "ADDRESS", "TEL" };
dbInsert.FieldValues = new string[] {
Guid.NewGuid().ToString(),
"JIA" + i.ToString(),
"SZ" +i.ToString(),
i.ToString()+"000"
};
Inserts[i] = dbInsert;
}
InsertAllData(Inserts);
而後在InsertAllData中對傳遞進來的Struct“解析”,執行操作。