NET C# 類別class 的宣告與封裝和使用練習

文章推薦指數: 80 %
投票人數:10人

在C# 中,類別是使用 Class 關鍵字來進行定義。

... 這個程式碼片段,宣告了一個自動建置的屬性Y,在這樣的用法中,我們並不需要額外的定義一個欄位_Y ... 2017年9月6日星期三 .NETC#類別class的宣告與封裝和使用練習 在C#中,類別是使用 Class 關鍵字來進行定義。

了解更多關於[類別]  了解更多關於[類別與物件]  了解更多關於[C#程式設計手冊]   我們在這裡會進行類別的成員宣告與定義,其中最常用的就是 欄位、屬性、建構函式、方法 的宣告。

在這個類別筆記中,我們定義了底下的類別 在這個類別中,我們定義了一個完整屬性X的宣告,你可以使用程式碼片段 propfull 來快速產生這個定義程式碼,這裡表示了屬性X的實際儲存內容,將會儲存在欄位_X內,當您要進行讀取/寫入動作的時候,是透過了get存取子和set存取子這兩個方法來間接存取欄位_X。

另外,我們使用程式碼片段 prop 這個程式碼片段,宣告了一個自動建置的屬性Y,在這樣的用法中,我們並不需要額外的定義一個欄位_Y,因為,編譯器會幫我們自動產生這些程式碼。

使用了自動建置的屬性,大幅簡化了我們在屬性上的程式碼撰寫,也讓我們的程式碼更加的清爽,最重要的是,這兩種做法的最終效果,都是一樣的。

在這個類別中,我們定義了一個建構函式,這個建構函式需要提供兩個參數。

若我們在類別中沒有定義任何建構函式,編譯器會自動幫我們產生一個預設建構函式(也就是沒有任何參數)。

不過,若我們在類別中有建立了任何建構函式,則,當我們要使用預設建構函式的時候,我們是需要自行定義出這個預設建構函式,否則,我們是無法使用預設建構函式的。

建構函式是我們建立一個類別的執行個體,也就是物件,必須要呼叫的;我們透過了建構函式,可以在其裡面針對這個類別的各個資料進行初始化的動作,設定這些資料的預設值。

最後,我們學習如何在類別中產生這個類別應該提供的行為,也就是方法。

Length() 這個方法我們使用了 private 存取修飾詞,宣告這個函式僅能夠在類別內來呼叫,我們會在類別內的 Print()來呼叫,而 Print() 方法的存取修飾詞為 public,這表示,任何程式碼皆可以透過執行個體來執行這個方法。

publicclassMyPoint { #region座標點(使用region來做到程式碼區隔) //可以使用程式碼片段propfull privatedouble_X; publicdoubleX { get{return_X;} set{_X=value;} } //可以使用程式碼片段prop publicdoubleY{get;set;} #endregion //可以使用程式碼片段ctor publicMyPoint(doublex,doubley) { X=x; Y=y; } ///

///計算座標點長度 ///(使用XML註解,提升程式碼閱讀性) ///這個方法僅限類別內可以使用 /// /// privatedoubleLength() { returnMath.Sqrt(X*X+Y*Y); } /// ///顯示座標詳細資訊 ///任何程式碼都可以存取這個方法 /// /// publicstringPrint() { return$"({X},{Y})的長度是{Length()}"; } } 使用類別產生物件,進而存取類別內的資料與行為 首先,您無法使用這個程式碼 MyPointfooObject1=newMyPoint(); 來產生一個類別MyPoint的執行個體。

您只能夠透過建構函式 MyPoint(doublex,doubley) 與new運算子來建立一個物件。

這個程式碼 MyPointfooObject4; 表示宣告一個物件變數 fooObject4;而這個物件變數並沒有指向任何參考物件,因此,這個變數物件的參考值為null,也就是沒有任何內容。

在底下的測試程式碼中,最為重要的觀念就是, fooObject4=fooObject2; 這表示了 fooObject4 與 fooObject2; 這兩個物件同時指向了一個相同的物件,而不是產生一個新的物件執行個體,並且讓 fooObject4 物件變數指向這個物件。

不過,若 MyPoint 若是一個結構,則剛剛的設定行為,就會產生另外一個意義。

staticvoidMain(string[]args) { //宣告一個MyPoint類別的物件變數,並且指向新產生的MyPoint物件 //MyPointfooObject1=newMyPoint();//這樣為什麼會發生錯誤 //宣告一個MyPoint類別的物件變數,並且指向新產生的MyPoint物件 MyPointfooObject2=newMyPoint(5,4); //宣告一個MyPoint類別的物件變數,並且指向新產生的MyPoint物件 varfooObject3=newMyPoint(5,4); //宣告一個MyPoint類別的物件變數 MyPointfooObject4; //將物件變數的參考值指向另外一個MyPoint物件 fooObject4=fooObject2; //在這裡,你可以呼叫Length()方法嗎? Console.WriteLine($"X:{fooObject2.X},Y:{fooObject2.Y}/更多詳細資訊{fooObject2.Print()}"); Console.WriteLine($"X:{fooObject3.X},Y:{fooObject3.Y}/更多詳細資訊{fooObject3.Print()}"); Console.WriteLine($"X:{fooObject4.X},Y:{fooObject4.Y}/更多詳細資訊{fooObject4.Print()}"); Console.WriteLine("Pressanykeyforcontinuing..."); Console.ReadKey(); Console.WriteLine("修改物件的內容"); fooObject2.X=7.0; fooObject3.X=8.0; fooObject4.X=9.0; Console.WriteLine($"X:{fooObject2.X},Y:{fooObject2.Y}/更多詳細資訊{fooObject2.Print()}"); Console.WriteLine($"X:{fooObject3.X},Y:{fooObject3.Y}/更多詳細資訊{fooObject3.Print()}"); Console.WriteLine($"X:{fooObject4.X},Y:{fooObject4.Y}/更多詳細資訊{fooObject4.Print()}"); Console.WriteLine("Pressanykeyforcontinuing..."); Console.ReadKey(); } 了解更多關於[類別]  了解更多關於[類別與物件]  了解更多關於[C#程式設計手冊]   By Vulcanlee 於 9月06,2017 以電子郵件傳送這篇文章BlogThis!分享至Twitter分享至Facebook分享到Pinterest 沒有留言: 張貼留言 較新的文章 較舊的文章 首頁 訂閱: 張貼留言(Atom) 若這些文章對你有幫助,歡迎贊助 贊助一杯咖啡 Google自訂搜尋 熱門文章 C#非同步工作Task的建立、執行、傳遞參數、結束、回傳值、取消、例外異常之使用教學 C#非同步工作Task的建立、執行、傳遞參數、結束、回傳值、取消、例外異常之使用教學深度研究:C#平行/並行計算Parallel.For隱藏在細節背後的惡魔,你所不瞭解的平行與併行計算在上一篇文章 C#執行緒Thread/ThreadP... C#執行緒Thread/ThreadPool的建立、執行、傳遞參數、結束、回傳值、取消、例外異常之使用教學 C#執行緒Thread/ThreadPool的建立、執行、傳遞參數、結束、回傳值、取消、例外異常之使用教學深度研究: C#平行/並行計算Parallel.For隱藏在細節背後的惡魔,你所不瞭解的平行與併行計算在這篇文章中,將會來說明如何在.NE... C#HttpClientWebAPI:5.使用POST要求與application/x-www-form-urlencoded類型編碼內容呼叫WebAPI 現在,我們要進入使用POST要求的使用方式介紹,在上一篇 C#HttpClientWebAPI:4.使用GET要求與QueryString呼叫WebAPI 文章中,我們看到了第一種傳遞資料到後端WebAPI伺服器的方法,那就是使用查詢字串... C#HttpClientWebAPI:7.使用POST要求與JSON編碼內容呼叫WebAPI 若你正在觀看此篇文章,則應該會對於 使用HttpClient進行JWT身分驗證與呼叫需要授權的API和重新更新Token權杖的程式設計範例 這篇文章更感興趣。

最後,讓我們來使用最後一種方式,這種編碼方式也是現在滿多人使用的技術,那就是將資料使用 ... C#的await與wait的差異在哪裡 C#的await與wait的差異在哪裡當在C#進行非同步(Asynchronous)工作程式設計的時候,通常會看到有兩種選擇來等候非同步工作的完成,第一種就是使用Task類別所提供的Wait()方法,另外一種就是使用C#5.0之後所提供的... C#:練習如何設計多載Overloading與覆寫Overriding 相信很多人對於C#的多載Overloading與覆寫Overriding都無法了解到其中的差異,我們在這裡做個簡單的說明了解更多關於[成員多載] 的使用方式了解更多關於[override(C#參考)] 的使用方式了解更多... 在.NETMAUI專案你使用字型圖示來美化App 在.NETMAUI專案你使用字型圖示來美化App若想要讓你的App更加光彩奪目,吸引他人的目光,那就多加些色彩與圖形在App內,然而,想要加入圖片與豐富的色彩,這個部分絕對是大部分程式設計師的罩門,也就是他們最不擅長的地方,不過,卻是可以在.NETMAUI... MicrosoftMVP XamarinMVP 網誌存檔 ►  2022 (39) ►  九月 (3) ►  八月 (18) ►  七月 (16) ►  五月 (2) ►  2021 (65) ►  十二月 (5) ►  九月 (1) ►  七月 (18) ►  六月 (16) ►  五月 (4) ►  四月 (8) ►  三月 (5) ►  二月 (1) ►  一月 (7) ►  2020 (43) ►  十一月 (2) ►  十月 (16) ►  九月 (7) ►  五月 (2) ►  四月 (12) ►  二月 (2) ►  一月 (2) ►  2019 (70) ►  十二月 (18) ►  十一月 (6) ►  十月 (2) ►  九月 (6) ►  八月 (3) ►  七月 (7) ►  六月 (8) ►  五月 (7) ►  四月 (3) ►  三月 (1) ►  二月 (7) ►  一月 (2) ►  2018 (45) ►  十二月 (2) ►  十一月 (4) ►  九月 (9) ►  八月 (11) ►  七月 (11) ►  五月 (1) ►  四月 (6) ►  二月 (1) ▼  2017 (65) ►  十一月 (2) ►  十月 (27) ▼  九月 (34) C#:網路下載檔案之下載進度事件event方法 C#:網路下載檔案之下載進度委派delegate方法 C#:使用Async和Await讀取多網站資料 C#:使用多個工作task讀取多網站資料 C#:泛型Generic類別的物件序列化 C#:使用多執行緒Thread讀取多網站資料 C#:using陳述式使用練習 C#:以明確方式實作介面(ExplicitInterfaceImplementation)練習 C#:購物車多樣付款機制(使用介面Interface來抽象化需求) .NETFramework/PCL可攜式類別庫/.NETStandard標準類別庫... C#:is(C#7.0類型模式)與as的使用練習 C#:練習如何設計多載Overloading與覆寫Overriding VisualStudio:除錯模式,會使用預設的帳號與密碼 C#:使用ICloneable介面,複製一個物件 了解.NET標準類別庫(.NETStandard)的TypeForwarding運作... C#:撰寫複製建構函式Constructorctor 剖析.NETFramework/.NETCore/Xamarin/.NETSta... C#:處置模式Dispose設計模式 C#:繼承類型InheritanceType的成員實值相等 C#:類型成員ClassMember的實值相等ValueEquality C#/CLR:關於集合Collection內的成員Member的記憶體回收Mem... C#:結構成員相等MemberEqual的測試 C#:物件相等ObjectEqual的測試 .NETC#常數const與唯讀readonly .NETC#物件延遲產生LazyInitialization的做法 .NETC#堆疊Stack與堆積Heap的記憶體耗盡測試 .NETC#靜態建構函式staticconstructor與執行個體建構函式Instan... .NETC#類別class的繼承Inheritance與方法的覆寫override和... .NETC#結構struct的宣告與封裝和使用練習 .NETC#類別class的宣告與封裝和使用練習 .NETC#物件參考與弱式參考的比較 .NET如何在C#,使用單例模式(SingletonPattern),設計這樣模式的類別 .NETC#使用類別建構式與解構式,來觀察GC記憶體回收運作機制 .NETC#類別繼承ClassInheritance中的建構函式Constructor... ►  八月 (2) 精選文章 在WPF上建立與使用Lottie來設計出具有動畫效果 在WPF上建立與使用Lottie來設計出具有動畫效果之前有寫過一篇 建立與使用Lottie來設計出具有動畫效果的App 文章,說明如何在.NETMAUI專案中,使用Lottie檔案,產生出具有動畫效果的應用程式,這兩天聽到有個WPF上有這樣類似的... 文章分類 C# (105) Xamarin.Forms (14) VisualStudio (11) ASP.NET (2) 搜尋此網誌 檢舉濫用情形



請為這篇文章評分?