• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

        C#圖文詳細教程第10課:屬性

        C#圖文詳細教程第10課:屬性

        更新時間:2022-05-16 文章作者:未知 信息來源:網絡 閱讀次數:

        本節課將介紹C#的屬性,其目的包括:
        1.理解什么是屬性

        2.如何實現屬性

        3.創建一個只讀屬性

        4.創建一個只寫屬性

        屬性是C#中獨具特色的新功能。通過屬性來讀寫類中的域,這具有一定的保護功能。在其它語言中,這是通過實現特定的getter和setter方法來實現的。C#的屬性具有保護功能,可以讓你就象訪問域一樣訪問屬性。要了解屬性的用法,我們先來看看如何用傳統的方法對域進行封裝。

        1.清單 10-1. 傳統的訪問類的域的例子:Accessors.cs

        using System;
        public class PropertyHolder
        {
        private int someProperty = 0;
        public int getSomeProperty()
        {
        return someProperty;
        }
        public void setSomeProperty(int propValue)
        {
        someProperty = propValue;
        }
        }

        public class PropertyTester
        {
        public static int Main(string[] args)
        {
        PropertyHolder propHold = new PropertyHolder();
        propHold.setSomeProperty(5);
        Console.WriteLine("Property Value: {0}", propHold.getSomeProperty());
        return 0;
        }
        }

        說明

        1.清單 10-1 演示了用傳統方法訪問類的域的例子。

        PropertyHolder類有個我們感興趣的域someProperty, PropertyHolder類帶有兩個方法:getSomeProperty和setSomeProperty。getSomeProperty方法返回someProperty域的值。SetSomeProperty方法設置域someProperty的值。

        2.類PropertyTester使用類PropertyHolder中的方法來獲取someProperty域的值。

        Main方法中新創建了一個PropertyHolder對象,之后通過使用setSomeProperty方法,調用propHold對象的setSomeProperty方法,設置其值為5。之后,調用Console.WriteLine方法輸出屬性值。對propHold對象的getSomeProperty的調用,是用來獲取屬性值的。它輸出"Property Value: 5"到控制臺。

        3.這種傳統的訪問域的信息的方法是很好的,因為它支持面向對象的封裝的概念。

        如果在對域someProperty的實現中,域的類型從int 類型變為byte類型,上述的方法仍然適用。現在,如果采用屬性的話,其實現會做得更為平滑。

        2.清單 10-2. 使用屬性訪問類的域:Properties.cs

        using System;
        public class PropertyHolder
        {
        private int someProperty = 0;
        public int SomeProperty
        {
        get
        {
        return someProperty;
        }
        set
        {
        someProperty = value;
        }
        }
        }

        public class PropertyTester
        {
        public static int Main(string[] args)
        {
        PropertyHolder propHold = new PropertyHolder();
        propHold.SomeProperty = 5;
        Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
        return 0;
        }
        }

        說明

        1.清單 10-2 演示了如何創建和使用屬性。

        PropertyHolder類中有個"SomeProperty" 屬性的實現。注意:屬性名的首字母必須大寫,這是屬性名"SomeProperty"和域名"someProperty"的唯一區別。屬性有兩種訪問操作:get和set。Get訪問操作返回的是someProperty域的值。Set訪問操作是設置someProperty域的值,其值為"value"的內容。Set訪問符號后面的"value"是C#中的保留字。通常,在其他場合下使用"value"關鍵字會出錯。。

        2.PropertyTester 類使用PropertyHolder類中的SomeProperty屬性。

        在Main方法的第一行中, 創建了PropertyHolder對象propHold。之后,把propHold對象的 someProperty 域的值設置為5,很簡單,就象對域賦值一樣,給屬性賦值。

        3.Console.WriteLine方法輸出 propHold對象的someProperty域的值。

        這是通過使用propHold對象的SomeProperty屬性來完成的。很簡單,就象對域賦值一樣,賦值給屬性。屬性可以設置為只讀的,這可以通過在屬性的實現中只設一個get訪問符號來實現。

        3.清單 10-3. 只讀屬性: ReadOnlyProperty.cs

        using System;
        public class PropertyHolder
        {
        private int someProperty = 0;
        public PropertyHolder(int propVal)
        {
        someProperty = propVal;
        }
        public int SomeProperty
        {
        get
        {
        return someProperty;
        }
        }
        }

        public class PropertyTester
        {
        public static int Main(string[] args)
        {
        PropertyHolder propHold = new PropertyHolder(5);
        Console.WriteLine("Property Value: {0}", propHold.SomeProperty);
        return 0;
        }
        }

        說明

        1.清單10-3 演示了如何實現只讀屬性。

        PropertyHolder類中,SomeProperty 屬性只有一個get訪問操作,沒有用到set訪問操作。PropertyHolder類中還有個接受整型參數的構造函數。

        2.在PropertyTester類的Main方法中,創建了新名為propHold的PropertyHolder類的對象。

        propHold對象在實例化時,調用了帶參數的PropertyHolder構造函數。在本例中,參數值為5,這對propHold 對象的someProperty域的值進行了初始化。

        3.因為PropertyHolder 類的SomeProperty屬性是只讀的,所以沒有其他的方法來設置someProperty域的值。

        如果你插入了"propHold.SomeProperty = 7"語句到程序清單中,該程序編譯將不會通過,因為SomeProperty是只讀屬性。在Console.WriteLine 方法中使用SomeProperty屬性時,程序執行正常。這是因為該方法調用了SomeProperty屬性的get訪問操作,這是個只讀操作。

        4.清單 10-4. 只寫屬性: WriteOnlyProperty.cs

        using System;
        public class PropertyHolder
        {
        private int someProperty = 0;
        public int SomeProperty
        {
        set
        {
        someProperty = value;
        Console.WriteLine("someProperty is equal to {0}", someProperty);
        }
        }
        }

        public class PropertyTester
        {
        public static int Main(string[] args)
        {
        PropertyHolder propHold = new PropertyHolder();
        propHold.SomeProperty = 5;
        return 0;
        }
        }

        說明

        1.清單 10-4 演示了如何創建和使用只寫屬性。

        這一次,在PropertyHolder類中的SomeProperty屬性中,去掉了get訪問操作,而加上了set訪問操作。其功能是輸出someProperty域的值。

        2.在PropertyTester 類中的Main方法中,用缺省的構造函數對PropertyTester類進行初始化。

        之后,使用propHold 對象的SomeProperty屬性,設置該域的值為5。這就調用了propHold 對象的set訪問操作, 把someProperty 域的值設置為5,最后,把"someProperty is equal to 5"的信息輸出到控制臺。

        小結
        現在,你已經了解了什么是屬性,以及屬性的使用方法,你也了解了使用屬性和使用傳統的類的方法之間的區別。屬性可以是只讀的,也可以是只寫的,每種場合下的使用方法,你都有所了解。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲AV成人一区二区三区在线看| 亚洲日本va中文字幕久久| 亚洲一区中文字幕在线电影网| 久久久久久一品道精品免费看| 日韩精品亚洲aⅴ在线影院| 一级毛片a免费播放王色| 国产亚洲?V无码?V男人的天堂| 久久免费99精品国产自在现线| 亚洲最大av无码网址| 丁香花在线观看免费观看图片| 中文字幕一精品亚洲无线一区| 成av免费大片黄在线观看| 亚洲精品无码鲁网中文电影| 18禁在线无遮挡免费观看网站| 亚洲av无码国产精品夜色午夜| 美女内射无套日韩免费播放| 亚洲毛片免费观看| 午夜视频在线观看免费完整版| 亚洲成AV人片高潮喷水| 亚洲国产成人久久综合碰| 黄 色一级 成 人网站免费| 亚洲成AV人片在线观看| 日韩精品无码免费一区二区三区| 亚洲人成人77777在线播放| 国产又长又粗又爽免费视频| 4hu四虎免费影院www| 91亚洲导航深夜福利| 成年在线网站免费观看无广告| 黄色免费网站在线看| 婷婷亚洲久悠悠色悠在线播放 | 在线观看黄片免费入口不卡| 久久久久亚洲精品日久生情| 成年人性生活免费视频| 精品一区二区三区免费观看| 亚洲另类图片另类电影| 亚洲国产成人乱码精品女人久久久不卡| 日韩精品无码免费专区午夜 | 免费一级毛片女人图片| 未满十八18禁止免费无码网站| 亚洲中文字幕无码mv| 亚洲人成伊人成综合网久久久|