• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • C#進階教程(四)

    發表于:2007-07-14來源:作者:點擊數: 標簽:
    C#進階教程(四): 這次我要向大家講的是C#中的屬性.屬性是什么呢,比如說我是男的,男就是我的一人屬性.我是一個大一的學生,大一也是我的一個屬性.屬性就是一個對象的性質.很簡單吧,呵呵!下面,我給出兩個例子,第一個例子出明了如何聲明一個可以修改的屬性,另一
    C#進階教程(四):   這次我要向大家講的是C#中的屬性.屬性是什么呢,比如說我是男的,男就是我的一人屬性.我是一個大一的學生,大一也是我的一個屬性.屬性就是一個對象的性質.很簡單吧,呵呵!下面,我給出兩個例子,第一個例子出明了如何聲明一個可以修改的屬性,另一個例了建立了一個抽象的屬性(Abstract),并且說明了如何在子類中丟棄它.好,下面讓我們開始吧.

       例子一:

    0 00: // Properties\person.cs
    001: using System;
    002: class Person
    003: {
    004: private string myName ="N/A";
    005: private int myAge = 0;
    006:
    007: // 聲明一個字符型的屬性Name
    008: public string Name
    009: {
    010: get
    011: {
    012: return myName;
    013: }
    014: set
    015: {
    016: myName = value;
    017: }
    018: }
    019:
    020: // 聲明一個int型的Age屬性
    021: public int Age
    022: {
    023: get
    024: {
    025: return myAge;
    026: }
    027: set
    028: {
    029: myAge = value;
    030: }
    031: }
    032:
    033: public override string ToString()
    034: {
    035: return "Name = " + Name + ", Age = " + Age;
    036: }
    037:
    038: public static void Main()
    039: {
    040: Console.WriteLine("Simple Properties");
    041:
    042: // 建立一個Person的實例
    043: Person person = new Person();
    044:
    045: file://打印出它的屬性
    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: // 增加年齡
    054: person.Age += 1;
    055: Console.WriteLine("Person details - {0}", person);
    056: }
    057: }

       這個例子的輸出是:

    Simple 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),什么是抽象的屬性呢,所謂的抽象的屬性呢,就是一個抽象類并不提供執行屬性存取程序,并且,他可以在子類中被忽略.下面的例子有三個文件,你要分別編譯它們才能得到結果,它們是:

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

       shapes.cs: Shape的子類

       shapetest.cs: 顯示程序.

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

    000: // Properties\abstractshape.cs
    001: using System;
    002:
    003: public abstract class Shape
    004: {
    005: private string myId;
    006:
    007: public Shape(string s)
    008: {
    009: Id = s; // 這句調用了Id屬性的set構建器
    010: }
    011:
    012: public string Id
    013: {
    014: get
    015: {
    016: return myId;
    017: }
    018:
    019: set
    020: {
    021: myId = value;
    022: }
    023: }
    024:
    025: public abstract double Area
    026: {
    027: get;
    028: }
    029:
    030: public override string ToString()
    031: {
    032: return Id + " Area = " + double.Format(Area, "F");
    033: }
    034: }

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

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

    000: // Properties\shapes.cs
    001: public class Square : Shape
    002: {
    003: private int mySide;
    004:
    005: public Square(int side, string id) : base(id)
    006: {
    007: mySide = side;
    008: }
    009:
    010: public override double Area
    011: {
    012: get
    013: {
    014: return mySide * mySide;
    015: }
    016: }
    017: }
    018:
    019: public class Circle : Shape
    020: {
    021: private int myRadius;
    022:
    023: public Circle(int radius, string id) : base(id)
    024: {
    025: myRadius = radius;
    026: }
    027:
    028: public override double Area
    029: {
    030: get
    031: {
    032: return myRadius * myRadius * System.Math.PI;
    033: }
    034: }
    035: }
    036:
    037: public class Rectangle : Shape
    038: {
    039: private int myWidth;
    040: private int myHeight;
    041:
    042: public Rectangle(int width, int height, string id) : base(id)
    043: {
    044: myWidth = width;
    045: myHeight = height;
    046: }
    047:
    048: public override double Area
    049: {
    050: get
    051: {
    052: return myWidth * myHeight;
    053: }
    054: }
    055: }

       這個例子就有些讓我們一頭霧水了,:是干什么的,好象是繼承,相當于JAVA中的extends吧.我想是的.我們先看一看吧.

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

    000: // Properties\shapetest.cs
    001: public class TestClass
    002: {
    003: public static void Main()
    004: {
    005: Shape[] shapes =
    006: {
    007: new Square(5, "Square #1"),
    008: new Circle(3, "Circle #1"),
    009: new Rectangle( 4, 5, "Rectangle #1")
    010: };
    011:
    012: System.Console.WriteLine("Shapes Collection");
    013: foreach(Shape s in shapes)
    014: {
    015: System.Console.WriteLine(s);
    016: }
    017:
    018: }
    019: }

       從這個例子上看,:這個符號的確是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++編程經驗的朋友.不過不要害怕,鼓起勇氣學下去,一定會有所收獲的. 我也要休息一下了,嘿嘿,早飯還沒有吃呢!

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>