C#中struct與class的區別詳解

來源:互聯網
上載者:User

標籤:blog   http   io   os   ar   art   div   sp   代碼   

轉自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx

有這麼幾點不同:

1.struct 是實值型別,class是物件類型

2.struct 不能被繼承,class可以被繼承

3.struct 預設的存取權限是public,而class預設的存取權限是private.

4.struct不能由程式員申明建構函式,即使是預設(不帶參數)的建構函式,同樣也不能有析構的處理部分。這是因為Struct的建構函式是由編譯器自動產生的。並且Struct的用途是那些描述輕量級的對象,例如Line,Point等,並且效率比較高。

5.struct的new和class的new是不同的。struct的new就是執行一下建構函式建立一個新執行個體再對所有的欄位進行Copy。而class則是在堆上分配一塊記憶體然後再執行建構函式,struct的記憶體並不是在new的時候分配的,而是在定義的時候分配

有人問“為什麼不能繼承System.Guid 中NewGuid方法呢”,答案是很簡單的,因為System.Guid 是結構而不是類。

比如定義如下結構和類

 

public struct MyType
{
    public int MyInteger;
}

public class Class1 : MyType
{
}


 

這段代碼將拋出編譯錯誤內容為 "Class1: cannot inherit from sealed class MyType". 

再如下面代碼:

 

public struct MyType
{
    public int MyInteger;
}

public struct Class1 : MyType
{
}


 

編譯錯誤如下: "Class1: type in interface list is not an interface". 


下面列舉出微軟提供的例子供大家學習

//Copyright (C) 2000 Microsoft Corporation.  All rights reserved.

// struct2.cs
using System;

class TheClass
{
    public int x;
}

struct TheStruct
{
    public int x;
}

class TestClass
{
    public static void structtaker(TheStruct s)
    {
        s.x = 5;
    }
    public static void classtaker(TheClass c)
    {
        c.x = 5;
    }
    public static void Main()
    {
        TheStruct a = new TheStruct();
        TheClass b = new TheClass();
        a.x = 1;
        b.x = 1;
        structtaker(a);
        classtaker(b);
        Console.WriteLine("a.x = {0}", a.x);
        Console.WriteLine("b.x = {0}", b.x);
    }
}


這個例子的輸出是:

a.x = 1b.x = 5

從這個例子例子可以看出,當一個結構被傳遞到一個方法時,被傳遞的只不過是一個副本,而一個類被傳遞時,被傳遞的是一個參考.所以a.x=輸出的是1,不變,而b.x卻變了.

還有的區別就是結構可以不用new來執行個體化,而類卻要.如果你不用new來執行個體化一個結構,那麼所有的欄位將仍然處於未分配狀態,直到所有的欄位被初始化.和類一樣,結構可以執行介面.更重要的是,結構沒有繼承性,一個結構不能從別的類繼承,也不能是別的類的基類.

C#中struct與class的區別詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.