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

首頁 > 編程 > .NET > 正文

.Net邊學邊講(二)

2024-07-10 12:58:22
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 我們繼續來談一談類
    與其他面向對象的編程語言不同,.net中類有四個基本成員,data members(fields), function members(methods), properties, events。其他編程語言只有前兩項。這里需注意,data members(fields)永遠不要聲明成public,因為這樣會使使用者無需知道你的類就可以改變你的數據。
    public class test{
        private int i;
    }
    這里i 就是一個data members(fields),需要提及一點,properties提供了方便、安全的數據訪問封裝。下面來談談function members(methods),他有兩種存在方式,instance和static。instance隱含的接受了指向他所在的對象的指針,在c#中你可以用對象名或this得到。如:someobject.method(), 或this.method()。靜態的(static)method不能接收到this指針。因此他們不能直接訪問類里的任何實例化數據。他的調用方式是someclassname.staticmethod()。他無需例示。function members(methods)默認是private的,即只能在聲明他們的類中訪問,我們需要聲明他們為public以便可以在任何類中訪問。function members(methods)可以被重載,也就是說你可以創建多個就有相同名字的方法,比如說test(int i), test(double i), test(), test(string i, bool b).....。.net編譯器會依據你傳遞的參數決定你在調用哪個方法。當然還有一些其它的修飾符如extern,他的用途是如果你想在.net framework中聲明你的方法而在.net framework之外實現你的方法,比如說在c# 中聲明你的方法而在windows本地dll中實現你的方法,你就要在c#中這樣聲明,public extern yourmethod(){}
    接下來我們要談談constructors和finalize,每個類都至少有一個constructor的方法,如果你沒有提供,c#將自動為你生成一個沒有任何參數的constructor。constructor是一個與你的類的名字相同且沒有任何返回值的的方法。每個constructor都會調用一個你基類的constructor(如果沒有顯性的基類,就調用對象的),這個調用會在你的constructor主體執行之前調用,這樣,你就知道你的基類有沒有正確的初始化了。constructor只在每個對象被創建時調用一次,它的作用是初始化對象的實例,以便于調用。destructors已不再需要,因為c#會自動提供一個清理對象的方法(叫finalize)。垃圾自動清理,這也是c#的區別于其他編程語言的特性之一。接下來,我們該談談屬性了。首先為什么要用屬性?來看一個例子,如果你有一個類person,有一個data members(fields)叫age 是int32型的被聲明成public,(前面我們講過不能聲明成public,這里就是舉例說明為什么不能):
    person jim = new person(); // create object; pointed to by jim
    jim.age = 23;
    int32 jimsage = jim.age;
    jim.age = -5; // invalid, but unchecked if you use a field
    這段代碼會造成兩個問題
    1.你的用戶知道了內部數據的細節,他們可能會做一些你不希望發生的操作
    2.你的用戶可能會更改數據為一個不合法的值,如將age設為零或負數
    現在大家可以知道屬性的優勢了,相對應予上面提的
    1.用戶不會知道你的內部數據結構
    2.屬性方法會保護數據
    下面的例程顯示了屬性的優越。
    public class person
    {
    int32 age; // 注意默認是private
       public person(int32 age) { // constructor
          this.age = age; // this消除歧義!
       }
       public int32 age { // property
          get {
             return age;
          }
          set {            // validating value
             if (value > 0 && value < 150) {
                age = value;
             }
             else {      // throw exception if invalid value
                throw new argumentexception("age must be between 1
    and 150");
             }
          }
       }
    }
    這段程序有幾個值的關注的地方
    1.在constructor中,我們定義了一個參數也叫age,這會與private age產生歧義。我們用this來消除歧義。
    2.get方法用于讀取屬性set方法用于存取屬性 。關鍵字value代表屬性被設置的值
    3.在set方法中我們檢查了value的值,并在數據不合法時拋出了異常
    有點打累了。。。:)
    下次我們談談event
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 万源市| 台中县| 兴业县| 会东县| 舞钢市| 吉隆县| 金阳县| 景谷| 樟树市| 锦州市| 清涧县| 炎陵县| 广东省| 加查县| 册亨县| 光泽县| 鹤壁市| 基隆市| 安仁县| 铜山县| 昂仁县| 东乌珠穆沁旗| 白朗县| 虹口区| 南陵县| 阿坝| 大港区| 玉田县| 隆德县| 河西区| 嘉义市| 台山市| 彰武县| 宁河县| 灌阳县| 东丰县| 会泽县| 昭苏县| 鄂托克前旗| 集安市| 潮安县|