程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 結構類值的產生與初始化

結構類值的產生與初始化

編輯:C#入門知識

結構類值的產生
•        一個結構類的變量存在於棧(stack)中
       字段不是被預先賦值的
       字段只有被賦值後才能讀
       使用點操作符來訪問成員
下面的例子假設Pair是一結構,它有兩公有整數類成員X,Y
static void Main()
{
    Pair p;
    Console.Write(p.X); //錯誤
    ...
}

static void Main()
{
    Pair p;
    p.X = 0;
    Console.Write(p.X); //正確
    ...
}
結構類的變量存在於棧中。在上面的例子中,雖然聲明了一個叫p的Pair類結構變量,但實際上只是聲明兩個局部變量p.X和p.Y的一種簡寫形式。
上面例子中的第一段程序的Console.Write試圖使用p.X的值,但它是錯誤的,因為p.X沒有被賦初值。

結構類值的初始化
•       一個結構變量:
       總是能使用缺省構造函數來進行初始化
       缺省構造函數把字段初始化為0/false/null
static void Main()
{
    Pair p;
    Console.Write(p.X); //錯誤,p.X沒有初始化
    ...
}
static void Main()
{
    Pair p = new Pair();
    Console.Write(p.X); //正確,p.X=0
    ...
}
除了上面介紹的初始化方法外,還可以使用缺省構造函數來初始化一個結構變量。調用構造函數總是使用new關鍵字。一個結構變量是值類型的,它直接存在於棧中,new關鍵字的使用不會在堆中開辟內存。結構的缺省構造函數總是把結構變量中的所有字段初始化(你不能改變這一行為,在下面一節會講到)。
如果你有C++或Java背景,你可能會很難相信使用new關鍵字來調用構造函數不會在堆中分配內存,但在C#中就是這樣。結構變量存在於棧中,調用構造函數初始化它的字段,沒有發生堆的內存分配。
C++程序員注意:在C#中調用缺省構造函數必須使用括號。
Pair p = new Pair; //錯誤
Pair p = new Pair();//正確


作者:ershouyage

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved