大家好,我是武漢華師的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 = 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做什麼事情. 這個事情,由它的子類來做.
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: {
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