天天看點

C#結構的學習 分類: C# 2013-01-...

結構是程式員定義的資料類型,非常的類似于類。有資料成員和函數成員。

但是也有差別:

1)類是引用類型,而結構是值類型;

2)結構是隐式密封的,不能被派生;

文法聲明與類相似:

//結構的聲明
        struct StructName
        {
            //包含的成員變量
        }
           

看下邊的示例代碼來示範C#結構的使用方法:

static void Main(string[] args)
        {
            Point first, second, third;
            first.x = 10; first.y = 10;
            second.x = 20; second.y = 20;
            third.x = first.x + second.x;
            third.y = first.y + second.y;

            Console.WriteLine("first:{0},{1}",first.x,first.y);
            Console.WriteLine("second:{0},{1}",second.x,second.y);
            Console.WriteLine("third:{0},{1}",third.x,third.y);
            Console.ReadKey();
        }

        struct Point
        {
            public int x;
            public int y;
        }
           

結構是值類型

1)結構類型的變量不能使null;

2)兩個結構變量不能引用同一對象

static void Main(string[] args)
        {
            CSimple cs1 = new CSimple(),cs2=null;
            Simple ss1 = new Simple(),ss2=new Simple();

            cs1.x = ss1.x = 5;
            cs1.y = ss1.y = 10;
            cs2 = cs1;   //指派類執行個體
            ss2 = ss1;   //指派結構執行個體

        }

        class CSimple
        {
            public int x;
            public int y;
        }

        struct Simple
        {
            public int x;
            public int y;
        }
           

先建立一個CSimple類,和一個Simple結構

在Main()分别對它們執行個體化聲明兩個個變量後,cs1和cs2分别指向在堆中的引用,而ss1和ss2分别在棧中配置設定空間并存儲。

把一個結構指派給另外一個結構,就是從一個結構中把值複值給另外一個結構。與類不同的是,複制類變量時隻有引用被複制。

如上面的代碼,類指派結束後,cs2和cs1指向堆中的同一個對象。但是在結構指派結束後,ss2成員的值和ss1成員的值相同。

結構中的構造函數和析構函數

語言隐式的為每個結構提供一個無參數的構造函數。這個構造函數把結構的每個成員設定為該類型的預設值,引用成員被設定成null

預定義的無參數構造函數對每個結構都存在,而且不能删除或者重新定義。但是可以建立另外的構造函數,隻要他們有參數。這和類不同,對于類,編譯器隻在沒有其它構造函數聲明時提供隐式的無參數構造函數。

要調用一個構造函數,包括隐式的無參數構造函數,要使用new運算符。即使不從堆中配置設定記憶體也使用new運算符。

如下面的執行個體:

static void Main(string[] args)
        {

            Simple s1 = new Simple();  //調用隐式的構造函數
            Simple s2 = new Simple(5, 10);  //調用構造函數
            Console.WriteLine("{0},{1}",s1.x,s1.y);
            Console.WriteLine("{0},{1}", s2.x, s2.y);
            
            Console.ReadKey();
        }

        struct Simple
        {
            public int x;
            public int y;

            public Simple(int a, int b)
            {
                x = a;
                y = b;
            }
        }
           

也可以不适用new運算符建立結構的執行個體。但是,有一些限制:

1)不能使用資料成員的值,直到顯示的設定它

2)不能調用任何函數成員,直到所有資料成員已經被指派

static void Main(string[] args)
        {

            Simple s1, s2;
            Console.WriteLine("{0},{1}", s1.x, s1.y);//編譯錯誤,s1.x, s1.y還沒有被指派

            s2.x = 50;
            s2.y = 10;
            Console.WriteLine("{0},{1}", s2.x, s2.y);

      
            Console.ReadKey();
        }

        struct Simple
        {
            public int x;
            public int y;
        }
           

原創作品,允許轉載,轉載時請務必以超連結形式标明文章 原始出處 、作者資訊和本聲明。

C#結構的學習 分類: C# 2013-01-...
C#結構的學習 分類: C# 2013-01-...

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

轉載于:https://www.cnblogs.com/yisuowushinian/archive/2013/01/10/4715638.html

c#