首頁 後端開發 C#.Net教程 SUNWEN教程之----C#進階(四)

SUNWEN教程之----C#進階(四)

Dec 19, 2016 am 10:19 AM

大家好,我是武漢華師的SUNWEN.呵呵,下午好不容易有了時間出去玩了,到了歸元寺.門票十元,不算貴,SUNWEN照了好多像,用不了多久,就可以讓大家看一看了.

閒話少說,讓我們進入正題.這次我要向大家講的是C#中的屬性.屬性是什麼呢,比如說我是男的,男就是我的一人屬性.我是一個大一的學生,大一也是我的一個屬性.屬性就是一個對象的性質.很簡單吧,呵呵!下面,我給出兩個例子,第一個例子出明瞭如何聲明一個可以修改的屬性,另一個例了建立了一個抽象的屬性(Abstract),並且說明瞭如何在子類中丟棄它.好,下面讓我們開始吧.

例子一:


000: // PRopertiesperson.cs
001 : using System;
002: class Person
003: {
004: private string myName ="N/A";
005: private int myAge = 0;
006:05: private int myAge = 0;
006: 型
008: public string Name
009: {
010: get 
011: {
012: return myName; 
013: }
014: set 15:016;
018: }
019: 
020: // 宣告一個int型的Age屬性
021: public int Age
022: {
023: get 
024: { 
:025: return myAge
024: { 
): : { 
029: myAge = value; 
030: }
031: }
032: 
033: public override string ToString()
034: {
035: return
034: {
035: return
Age;
036: }
037: 
038: public static void Main()
039: {
040: Console.WriteLine("Simple Properties");
041: 
: Person person = new Person();
044: 
045: //印出它的屬性
046: Console.WriteLine("Person details - {0}", person);
047: 
048: // 對屬性進行一些設定
049: person.Name = "Joe";
050: person.Age = 99;
051: Console.WriteLine("Person details - {0}", person);
052: 
053://}", person);
052: 
/ 增加年齡
054: person.Age += 1;
055: Console.WriteLine("Person details - {0}", person);
056: }
057: }
這個例子的輸出是: Properties

Person details - Name = N/A, Age = 0

Person details - Name = Joe, Age = 99
Person details - Name = Joe, Age = 100

好了,又起床了,昨天寫到這,就跑到床上睡了,呵呵.現在是五一的第二天,看看我今天能寫幾篇,昨天寫了二篇.

從上面的程序我們可以看出,一個類的屬性的設置,借用了VB的概念,和java中不盡相同了.(這就是M$,TMD!)有的朋友可能很奇怪,為什麼我們可以用Console.WriteLine()來打印一個對象person呢.其實道理很簡單,和在JAVA中的一樣,當調節器用一個打印方法時,這個對象自動調用它的ToString()(在JAVA中是toString,TMD,又差點犯錯!)方法.在33行,我們可以看到有這個方法的影子,override這個關鍵字大概就是覆蓋父類別的方法吧,這是不是有點多餘?我們可以看到,一個物件的屬性的設定是透過一個get()和set()組合來完成的,當然,還有一個value這個東東.補充一下,你還可以控制一個屬性的讀/寫權限,只是把get()和set()簡單地去掉就可以了,比如你不要寫的屬性,就不要set()就可以了,如果你不要讀,就不要get()吧.總得感覺,C#在這點上沒有JAVA來的靈活(完了,又要被蓋痴打了!).

第二個例子:

這個例子說明瞭如何建立抽象的屬性(Abstract),什麼是抽象的屬性呢,所謂的抽象的屬性呢,就是....(唉,每次廢話都這麼多!FT) 一個抽象類別並不提供執行屬性存取程式,並且,他可以在子類別中被忽略.下面的例子有三個檔案,你要分別編譯它們才能得到結果,它們是:

abstractshape.cs: Shape類別,包含一個Area抽象屬性 

shapes.cs: Shape的子類 

shapetest.cs: 顯示程式. 
要編譯這些程式,運行:csc abstractshape.cs shapes.cs shapetest.cs就可以了.運行完之後,它會產生shapetest.exe這個可執行程式.

000: // Propertiesabstractshape.cs
001: using System;
002:
003: public abstract class Shape
004: {
005: private string mype
004: {
005: private string myId
04: {
005: private string myId; {
009: Id = s; // 這句話呼叫了Id屬性的set建構器
010: }
011:
012: public string Id
013: {
014: get15: ;
017: }
018:
019: set
020: {
021: myId = value;
022: }
023: }
024:
025: public abme023: }
024:!
028: }
029:
030: public override string ToString()
031: {
032: return Id + " Area = " + double.Format(Area, "F");
033: }
033: }

看這個程式, 實際上非常地簡單,當這個類別對的物件被建立時,初始化部分為007-010,它把建立物件的參數s給了Id這個屬性.然後進行了上一個例子的操作.實際上,我們可以把抽象屬性與JAVA中的介面(Interface)相比,它們只提拱一個方法的名稱,而不提供這個方法的內容.就像Area這個抽象屬性,有一個get,但是它並沒有指定get方法(也許它不能稱之為方法)裡的內容,即要get做什麼事情. 這個事情,由它的子類來做.

第二個文件:在這個文件中,一個類覆蓋了(override)了Area屬性.

000: // Propertiesshapes.cs

001: public class Square : Shape
002: {
003: private int mySide;
004: publicstring, publicstring ) : base(id)
006: {
007: mySide = side;
008: }
009:
010: public override double Area
011: {
010: public override double Area
011: {my/3012: get3012: 73030333: 30333:03012:303333333:7033:70333:7033:7033:7033:7072:03:7012: ;
015: }
016: }
017: }
018:
019: public class Circle : Shape
020: {
021: private int myRadius
022: 83); : base(id)
024: {
025: myRadius = radius;
026: }
027:
028: public override double Area
029: {
030: get3m 30 System.Math.PI;
033: }
034: }
035: }
036:
037: public class Rectangle : Shape
038: {
042: public Rectangle(int width, int height, string id) : base(id)
043: {
044: myWidth = width;
045: myHeight = height; double Area
049: {
050: get
051: {
052: return myWidth * myHeight;
053: }
054: }
055: }
053: }
054: }
055: }
053: }
054: }
055: }
這個例子就有些讓我們一頭霧的,好像是繼承,相當於JAVA中的extends吧.我想是的.我們先看一看吧.

下面的第三個文件就是一個測試文件了,很簡單,大家看一看.

000: // Propertiesshapetest.cs
001: public class TestClass
002: {

003: public static void Main()

004: {

005: Shape[] shapes Main()

004: {
005: Shape[] shapes = Square
006: "Square #1"),
008: new Circle(3, "Circle #1"),
009: new Rectangle( 4, 5, "Rectangle #1")
010: };
011: 
System. .Console.WriteLine("Shapes Collection");
013: foreach(Shape s in shapes)
014: {
015: System.Console.WriteLine(s);
016: }
017:50017: : }
從這個例子上看,:這個符號的確是extends的意思,就是繼承.繼承是什麼意思,說白了,就是生孩子的意思.比如下面一句sunwenson extends sunwen,這名就是說sunwenson這個類繼承了sunwen,sunwenson這個類別有sunwen類的所有東西,同時可以添加和刪除sunwen中的一些東西.就這麼簡單,但是這是現代軟體發展的一項重要技術,因為它可以使軟體的重用性大大提高.唉,這些就只有大三大四的人說了,我就沒資格了.呵呵.

這個程序的輸出是:

Shapes Collection
Square #1 Area = 25.00
Circle #1 Area = 28.27
Rectangle #1 Area = 20.00

完了,這一節又完了.要理解這一節,有一定的難度, 特別對那些沒有JAVA或C++程式設計經驗的朋友.不過不要害怕,鼓起勇氣學下去,一定會有所收穫的. 我也要休息一下了,嘿嘿,早餐還沒吃呢!

 以上就是SUNWEN教程之----C#進階(四)的內容,更多相關內容請關注PHP中文網( www.php.cn)!





本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

使用 C# 的活動目錄 使用 C# 的活動目錄 Sep 03, 2024 pm 03:33 PM

使用 C# 的 Active Directory 指南。在這裡,我們討論 Active Directory 在 C# 中的介紹和工作原理以及語法和範例。

C# 序列化 C# 序列化 Sep 03, 2024 pm 03:30 PM

C# 序列化指南。這裡我們分別討論C#序列化物件的介紹、步驟、工作原理和範例。

C# 中的隨機數產生器 C# 中的隨機數產生器 Sep 03, 2024 pm 03:34 PM

C# 隨機數產生器指南。在這裡,我們討論隨機數產生器的工作原理、偽隨機數和安全數的概念。

C# 資料網格視圖 C# 資料網格視圖 Sep 03, 2024 pm 03:32 PM

C# 資料網格視圖指南。在這裡,我們討論如何從 SQL 資料庫或 Excel 檔案載入和匯出資料網格視圖的範例。

C# 中的階乘 C# 中的階乘 Sep 03, 2024 pm 03:34 PM

C# 階乘指南。這裡我們討論 C# 中階乘的介紹以及不同的範例和程式碼實作。

C# 中的模式 C# 中的模式 Sep 03, 2024 pm 03:33 PM

C# 模式指南。在這裡,我們討論 C# 中模式的介紹和前 3 種類型,以及其範例和程式碼實作。

C# 中的質數 C# 中的質數 Sep 03, 2024 pm 03:35 PM

C# 質數指南。這裡我們討論c#中素數的介紹和範例以及程式碼實作。

c#多線程和異步的區別 c#多線程和異步的區別 Apr 03, 2025 pm 02:57 PM

多線程和異步的區別在於,多線程同時執行多個線程,而異步在不阻塞當前線程的情況下執行操作。多線程用於計算密集型任務,而異步用於用戶交互操作。多線程的優勢是提高計算性能,異步的優勢是不阻塞 UI 線程。選擇多線程還是異步取決於任務性質:計算密集型任務使用多線程,與外部資源交互且需要保持 UI 響應的任務使用異步。

See all articles