国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

C#教程第十課:屬性

2024-07-21 02:25:27
字體:
來源:轉載
供稿:網友

本節課將介紹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"的信息輸出到控制臺。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤庆县| 台南市| 安新县| 南丰县| 辽阳县| 崇明县| 报价| 衡阳市| 金溪县| 乐至县| 东乌| 乌兰县| 长武县| 大埔区| 伊宁县| 康马县| 广饶县| 黑龙江省| 莱州市| 锡林郭勒盟| 若尔盖县| 那坡县| 治多县| 西城区| 武清区| 乐昌市| 巴南区| 正宁县| 逊克县| 连州市| 上饶县| 德格县| 金阳县| 资源县| 驻马店市| 洪湖市| 南阳市| 定远县| 宁强县| 通榆县| 扬中市|