溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#類與結構再次詳解

發(fā)布時間:2020-06-17 18:51:33 來源:網(wǎng)絡 閱讀:242 作者:郊居歲暮 欄目:編程語言

類和結構是 .NET Framework 中的常規(guī)類型系統(tǒng)的兩種基本構造。  兩者在本質上都屬于數(shù)據(jù)結構,封裝著一組整體作為一個邏輯單位的數(shù)據(jù)和行為。  數(shù)據(jù)和行為是該類或結構的“成員”,它們包含各自的方法、屬性和事件等(本主題后面列出了這些內(nèi)容)。

類或結構的聲明類似于藍圖,用于在運行時創(chuàng)建實例或對象。  如果定義一個名為 Person 的類或結構,則 Person 為類型名稱。  如果聲明并初始化 Person 類型的變量 p,則 p 稱為 Person 的對象或實例。  可以創(chuàng)建同一 Person 類型的多個實例,每個實例在其屬性和字段中具有不同的值。

類是一種“引用類型”。  創(chuàng)建類的對象時,對象賦值到的變量只保存對該內(nèi)存的引用。  將對象引用賦給新變量時,新變量引用的是原始對象。  通過一個變量做出的更改將反映在另一個變量中,因為兩者引用同一數(shù)據(jù)。

結構是一種值類型。  創(chuàng)建結構時,結構賦值到的變量保存該結構的實際數(shù)據(jù)。  將結構賦給新變量時,將復制該結構。  因此,新變量和原始變量包含同一數(shù)據(jù)的兩個不同的副本。  對一個副本的更改不影響另一個副本。

類通常用于對較為復雜的行為建模,或對要在創(chuàng)建類對象后進行修改的數(shù)據(jù)建模。  結構最適合一些小型數(shù)據(jù)結構,這些數(shù)據(jù)結構包含的數(shù)據(jù)以創(chuàng)建結構后不修改的數(shù)據(jù)為主。

下面的示例在 ProgrammingGuide 命名空間的頂級使用三個成員定義了 MyCustomClass。  在 Program 類的 Main 方法中創(chuàng)建了 MyCustomClass 的一個實例(對象),并使用點表示法訪問該對象的方法和屬性。

namespace ProgrammingGuide
    {    // Class definition.
        public class MyCustomClass
        { // Class members:
          // Property.
            public int Number { get; set; }            // Method.
            public int Multiply(int num)
            {                return num * Number;
            }            
            // Instance Constructor.
            public MyCustomClass()
            {
                Number = 0;
            }
        }       
            // Another class definition. This one contains
            // the Main method, the entry point for the program.
        class Program
        {    static void Main(string[] args)
            {                
            // Create an object of type MyCustomClass.
                MyCustomClass myClass = new MyCustomClass();             
              // Set the value of a public property.
                myClass.Number = 27;              
                // Call a public method.
                int result = myClass.Multiply(4);
            }
        }
    }

封裝

“封裝”有時被稱為面向對象的編程的第一個支柱或原則。  根據(jù)封裝的原則,類或結構可以指定其每個成員對于該類或結構外部的代碼的可訪問性。  可將無意在類或程序集外部使用的方法和變量隱藏起來,以減小編碼錯誤或遭惡意利用的可能性。

有關類的更多信息,請參見類和對象。

成員

所有方法、字段、常量、屬性和事件都必須在類型內(nèi)部進行聲明;這些稱為類型的“成員”。  與其他一些語言不同的是,C# 中沒有全局變量或方法。  即使是作為程序入口點的 Main 方法也必須在類或結構內(nèi)部進行聲明。  下表列出了可在類或結構中聲明的所有不同種類的成員。

  • 字段

  • 常量

  • 屬性

  • 方法

  • 構造函數(shù)

  • 析構函數(shù)

  • 事件

  • 索引器

  • 運算符

  • 嵌套類型


輔助功能

有些方法和屬性要供類或結構外部的代碼(稱為“客戶端代碼”)調用或訪問。  另有一些方法和屬性可能僅供類或結構在自身內(nèi)部使用。  應限制您的代碼的可訪問性,只允許應當訪問它們的客戶端代碼進行訪問,這一點十分重要。  使用訪問修飾符 public、protected、internal、protected internal 和 private 可以指定類型及其成員對于客戶端代碼的可訪問性。  默認可訪問性為 private。  有關詳細信息,請參閱 訪問修飾符。

Inheritance

類(而非結構)支持繼承的概念。  派生自另一個類(“基類”)的類將自動包含基類除構造函數(shù)和析構函數(shù)之外的所有公共、受保護和內(nèi)部成員。  有關更多信息,請參見繼承和多態(tài)性。

可以將類聲明為抽象類,表示該類的一個或多個方法不具有實現(xiàn)。  抽象類雖然無法直接實例化,但可以用作其他類的基類,由其他類提供缺少的實現(xiàn)。  還可以將類聲明為密封類,以禁止其他類從該類繼承。  有關詳細信息,請參閱 抽象類、密封類及類成員。

接口

類和結構可以繼承多個接口。  從接口繼承意味著該類型要實現(xiàn)該接口中定義的所有方法。  有關詳細信息,請參閱 接口。

泛型類型

可以使用一個或多個類型參數(shù)來定義類和結構。  客戶端代碼在創(chuàng)建類型的實例時提供類型。  例如,System.Collections.Generic 命名空間中的 List<T> 類使用一個類型參數(shù)進行定義。  客戶端代碼創(chuàng)建 List<string>List<int> 的實例來指定列表中將包含的類型。  有關詳細信息,請參閱 泛型。

靜態(tài)類型

可以將類(不是結構)聲明為靜態(tài)。  靜態(tài)類只能包含靜態(tài)成員,不能使用 new 關鍵字進行實例化。  在程序加載時,靜態(tài)類的一個副本將加載到內(nèi)存中,可通過類名稱訪問該類的成員。  類和結構都可以包含靜態(tài)成員。  有關詳細信息,請參閱 靜態(tài)類和靜態(tài)類成員。

嵌套類型

類或結構可以嵌套在其他類或結構中。  有關更多信息,請參見嵌套類型。

分部類型

可以在一個代碼文件中定義類、結構或方法的一部分,而在另一個代碼文件中定義另一部分。  有關更多信息,請參見分部類和方法。

對象初始值設定項

可以實例化和初始化類或結構對象以及對象的集合,無需顯式調用其構造函數(shù)。  有關更多信息,請參見對象和集合初始值設定項。

匿名類型

在不方便或沒必要創(chuàng)建命名類的情況下,例如當使用無需保留或傳遞給其他方法的數(shù)據(jù)結構填充列表時,可以使用匿名類型。  有關更多信息,請參見匿名類型。

擴展方法

通過創(chuàng)建一個單獨的類型,然后將該類型的方法當作原始類型的方法來調用,可以在不必創(chuàng)建派生類的情況下對類進行“擴展”。  有關更多信息,請參見擴展方法。

隱式類型化局部變量

在類或結構方法中,可以使用隱式類型來指示編譯器在編譯時確定正確的類型。  有關更多信息,請參見隱式類型的局部變量。



摘自:https://msdn.microsoft.com/zh-cn/library/ms173109.aspx





向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI