您好,登錄后才能下訂單哦!
類和結構是 .NET Framework 中的常規類型系統的兩種基本構造。 兩者在本質上都屬于數據結構,封裝著一組整體作為一個邏輯單位的數據和行為。 數據和行為是該類或結構的“成員”,它們包含各自的方法、屬性和事件等(本主題后面列出了這些內容)。
類或結構的聲明類似于藍圖,用于在運行時創建實例或對象。 如果定義一個名為 Person
的類或結構,則 Person
為類型名稱。 如果聲明并初始化 Person
類型的變量 p
,則 p
稱為 Person
的對象或實例。 可以創建同一 Person
類型的多個實例,每個實例在其屬性和字段中具有不同的值。
類是一種“引用類型”。 創建類的對象時,對象賦值到的變量只保存對該內存的引用。 將對象引用賦給新變量時,新變量引用的是原始對象。 通過一個變量做出的更改將反映在另一個變量中,因為兩者引用同一數據。
結構是一種值類型。 創建結構時,結構賦值到的變量保存該結構的實際數據。 將結構賦給新變量時,將復制該結構。 因此,新變量和原始變量包含同一數據的兩個不同的副本。 對一個副本的更改不影響另一個副本。
類通常用于對較為復雜的行為建模,或對要在創建類對象后進行修改的數據建模。 結構最適合一些小型數據結構,這些數據結構包含的數據以創建結構后不修改的數據為主。
下面的示例在 ProgrammingGuide
命名空間的頂級使用三個成員定義了 MyCustomClass
。 在 Program
類的 Main
方法中創建了 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); } } }
封裝
“封裝”有時被稱為面向對象的編程的第一個支柱或原則。 根據封裝的原則,類或結構可以指定其每個成員對于該類或結構外部的代碼的可訪問性。 可將無意在類或程序集外部使用的方法和變量隱藏起來,以減小編碼錯誤或遭惡意利用的可能性。
有關類的更多信息,請參見類和對象。
所有方法、字段、常量、屬性和事件都必須在類型內部進行聲明;這些稱為類型的“成員”。 與其他一些語言不同的是,C# 中沒有全局變量或方法。 即使是作為程序入口點的 Main
方法也必須在類或結構內部進行聲明。 下表列出了可在類或結構中聲明的所有不同種類的成員。
字段
常量
屬性
方法
構造函數
析構函數
事件
索引器
運算符
嵌套類型
有些方法和屬性要供類或結構外部的代碼(稱為“客戶端代碼”)調用或訪問。 另有一些方法和屬性可能僅供類或結構在自身內部使用。 應限制您的代碼的可訪問性,只允許應當訪問它們的客戶端代碼進行訪問,這一點十分重要。 使用訪問修飾符 public、protected、internal、protected internal
和 private 可以指定類型及其成員對于客戶端代碼的可訪問性。 默認可訪問性為 private
。 有關詳細信息,請參閱 訪問修飾符。
類(而非結構)支持繼承的概念。 派生自另一個類(“基類”)的類將自動包含基類除構造函數和析構函數之外的所有公共、受保護和內部成員。 有關更多信息,請參見繼承和多態性。
可以將類聲明為抽象類,表示該類的一個或多個方法不具有實現。 抽象類雖然無法直接實例化,但可以用作其他類的基類,由其他類提供缺少的實現。 還可以將類聲明為密封類,以禁止其他類從該類繼承。 有關詳細信息,請參閱 抽象類、密封類及類成員。
類和結構可以繼承多個接口。 從接口繼承意味著該類型要實現該接口中定義的所有方法。 有關詳細信息,請參閱 接口。
可以使用一個或多個類型參數來定義類和結構。 客戶端代碼在創建類型的實例時提供類型。 例如,System.Collections.Generic 命名空間中的 List<T> 類使用一個類型參數進行定義。 客戶端代碼創建 List<string>
或 List<int>
的實例來指定列表中將包含的類型。 有關詳細信息,請參閱 泛型。
可以將類(不是結構)聲明為靜態。 靜態類只能包含靜態成員,不能使用 new 關鍵字進行實例化。 在程序加載時,靜態類的一個副本將加載到內存中,可通過類名稱訪問該類的成員。 類和結構都可以包含靜態成員。 有關詳細信息,請參閱 靜態類和靜態類成員。
類或結構可以嵌套在其他類或結構中。 有關更多信息,請參見嵌套類型。
可以在一個代碼文件中定義類、結構或方法的一部分,而在另一個代碼文件中定義另一部分。 有關更多信息,請參見分部類和方法。
可以實例化和初始化類或結構對象以及對象的集合,無需顯式調用其構造函數。 有關更多信息,請參見對象和集合初始值設定項。
在不方便或沒必要創建命名類的情況下,例如當使用無需保留或傳遞給其他方法的數據結構填充列表時,可以使用匿名類型。 有關更多信息,請參見匿名類型。
通過創建一個單獨的類型,然后將該類型的方法當作原始類型的方法來調用,可以在不必創建派生類的情況下對類進行“擴展”。 有關更多信息,請參見擴展方法。
在類或結構方法中,可以使用隱式類型來指示編譯器在編譯時確定正確的類型。 有關更多信息,請參見隱式類型的局部變量。
摘自:https://msdn.microsoft.com/zh-cn/library/ms173109.aspx
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。