當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C# Class和Structure的區別用法及代碼示例

在 C# 中,類和結構都用於定義自定義數據類型,但它們之間存在一些差異。

繼承:類可以繼承其他類,但結構不能。換句話說,一個類可以從另一個類派生,但結構不能。

引用類型與值類型:類是引用類型,這意味著當您創建類的對象時,會創建對該對象的引用,並且在使用該引用的任何地方都會反映對該對象的更改。另一方麵,結構是一種值類型,這意味著當您創建結構類型的變量時,該變量的實際值存儲在內存中,並且對該變量的更改不會反映在其他地方。

  1. 默認構造函數:類總是有一個默認構造函數,在創建該類的對象時調用該構造函數。另一方麵,結構默認沒有默認構造函數。但是,如果需要,您可以在結構中定義默認構造函數。
  2. 初始化:當您創建類的對象時,其成員將被初始化為其默認值(即引用類型為 null,值類型為 0)。當您創建結構類型的變量時,其成員也會初始化為其默認值。但是,您也可以在創建結構類型的變量時為該結構的成員提供初始值。
  3. 大小和性能:結構的大小通常比類小,因為它們不包含任何引用變量或開銷。這意味著結構作為參數傳遞或複製比類更快。

A 是用戶定義的藍圖或原型,用於創建對象。本質上,一個類將字段和方法(定義操作的成員函數)組合成一個單元。

例子:

C#


// C# program to illustrate the
// concept of class
using System;
// Class Declaration
public class Author {
    // Data members of class
    public string name;
    public string language;
    public int article_no;
    public int improv_no;
    // Method of class
    public void Details(string name, string language,
                        int article_no, int improv_no)
    {
        this.name = name;
        this.language = language;
        this.article_no = article_no;
        this.improv_no = improv_no;
        Console.WriteLine("The name of the author is : " + name
                        + "\nThe name of language is : " + language
                        + "\nTotal number of article published "
                        + article_no + "\nTotal number of Improvements:"
                        +" done by author is : " + improv_no);
    }
    // Main Method
    public static void Main(String[] args)
    {
        // Creating object
        Author obj = new Author();
        // Calling method of class
        // using class object
        obj.Details("Ankita", "C#", 80, 50);
    }
}
輸出
The name of the author is :  Ankita
The name of language is : C#
Total number of article published  80
Total number of Improvements: done by author is : 50

A 結構體是單個單元下不同數據類型的變量的集合。它幾乎類似於類,因為兩者都是用戶定義的數據類型,並且都保存一堆不同的數據類型。

例子:

C#


// C# program to illustrate the
// concept of structure
using System;
// Defining structure
public struct Car
{
    // Declaring different data types
    public string Brand;
    public string Model;
    public string Color;
}
class GFG {
    // Main Method
    static void Main(string[] args)
    {
        // Declare c1 of type Car
        // no need to create an
        // instance using 'new' keyword
        Car c1;
        // c1's data
        c1.Brand = "Bugatti";
        c1.Model = "Bugatti Veyron EB 16.4";
        c1.Color = "Gray";
        // Displaying the values
        Console.WriteLine("Name of brand: " + c1.Brand
                          + "\nModel name: " + c1.Model
                          + "\nColor of car: " + c1.Color);
    }
}
輸出
Name of brand: Bugatti
Model name: Bugatti Veyron EB 16.4
Color of car: Gray

類和結構之間的區別

結構

類是引用類型。

結構體是值類型。

所有引用類型都分配在堆內存上。

所有值類型都分配在堆棧內存上。

大引用類型的分配比大值類型的分配更便宜。

與引用類型相比,分配和 de-allocation 在值類型中更便宜。

類具有無限的函數。

結構體的函數有限。

類一般用在大型程序中。

結構體用於小程序中。

類可以包含構造函數或析構函數。

結構不包含無參數構造函數或析構函數,但可以包含參數化構造函數或靜態構造函數。

類使用 new 關鍵字來創建實例。

struct 可以創建一個實例,有或沒有 new 關鍵字。

一個類可以繼承另一個類。

不允許結構體繼承另一個結構體或類。

類的數據成員可以受到保護。

struct 的數據成員無法受到保護。

類的函數成員可以是虛擬的或抽象的。

結構體的函數成員不能是虛擬的或抽象的。

類的兩個變量可以包含同一個對象的引用,並且對一個變量的任何操作都可以影響另一個變量。

struct 中的每個變量都包含自己的數據副本(除了 ref 和 out 參數變量),對一個變量的任何操作都不會影響另一個變量。

總之,C# 中的類和結構之間的主要區別是繼承、引用類型與值類型、默認構造函數、初始化和大小/性能。類通常用於更大、更複雜的對象,而結構則用於更小、更簡單、經常使用且需要快速傳遞的對象。然而,類和結構都有各自的優點和缺點,它們之間的選擇最終取決於項目的具體要求。



相關用法


注:本文由純淨天空篩選整理自ankita_saini大神的英文原創作品 Difference between Class and Structure in C#。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。