重读C#高级编程之Struct在实际开发中的应用

   首先看看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“解析”,执行操作。

posted on 2008-06-03 11:32  easy2Dev  阅读(387)  评论(0编辑  收藏  举报

导航