1. 程式人生 > >C#值型別和引用型別_160928

C#值型別和引用型別_160928

值型別: int double char bool

引用型別: 類,陣列,介面 string型別是類,所有事引用型別

int x = 5;

int y = x;

y--;

值型別:修改任何一個副本,不會影響其他副本(儲存決定的)

namespace value_cite
{
    class Program
    {
        static void Main(string[] args)//值和引用
        {
            Child c1 = new Child();
            c1.Name = "xiaoming";
            Child c2 = c1;//沒有使用new關鍵字,沒有開闢新的記憶體
            c2.Name = "xiaohong";
            Console.WriteLine(c1.Name);
            Console.WriteLine(c2.Name);
        }
    }
}

引用型別:修改任何一個副本,也影響了其他副本,記憶體是共用的,上例中兩個name 都是xiaohong

==============================================================================

類是引用型別的,

結構struct是值型別的,不必例項化,不能為結構中的欄位賦初始值,結構中的構造方法中必須為所有字元段賦值,不能為結構顯式的定義無引數的構造方法(自己定義的構造必須帶引數),結構型別的物件可以不例項化 new

值型別和引用型別作為方法的引數

按照引用傳參,方法修改形參,通常實參也會被修改

按值傳參,方法修改形參,實參不會被修改

===================================10月17日更新===================================

值型別和引用型別最大差異在於資料的儲存方式上

值型別的資料以固定的大小依序儲存在記憶體棧中,效率高

引用烈性的資料需要使用new關鍵字建立物件,儲存在堆中heap,是由系統彈性配置的記憶體空間,沒有特定的大小和存活時間,應用在物件訪問上。

值型別包括,整形,實數型別,布林型別,字元型別,結構體型別(變數前需要加訪問許可權),列舉型別

引用型別:引用型別不儲存他們所代表的實際資料,儲存實際資料的地址。如果引用的值型別的值是null,表示沒有引用任何物件。引用型別包括:類,物件,介面,委託delegate, 陣列array, 字串型別