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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#中g(shù)et和set

2019-11-14 13:50:37
字體:
供稿:網(wǎng)友

http://blog.sina.com.cn/s/blog_82526aa60100txtx.html

 在程序中經(jīng)常碰到get、set,不甚明白,在網(wǎng)上查詢時也說的迷迷糊糊,所以整理下,以學(xué)的明白透徹點。

    有兩個類person:

    public class person

    {

      public string name;

    }

    public class person

    {

      public string Name{set;get;}

    }

    第一個類型的name屬性未封裝,其name屬性直接通過public關(guān)鍵字暴露給系統(tǒng)中的其他類了,而第二個類型的name屬性通過get set關(guān)鍵字進行了封裝,get和set分別對應(yīng)的是可讀和可寫,相當(dāng)于如下代碼:

    PRivate string name;

    public string Name

    {

      get { return name; }

     set { name = value; }

   }

    簡單說下區(qū)別吧:當(dāng)實例化第一個“person”這個類時,系統(tǒng)在分配內(nèi)存空間時對name屬性直接分配內(nèi)存,之后對name屬性的操作也是直接操作內(nèi)存中name屬性所在的這個塊;而當(dāng)實例化第二個“人”類型時,系統(tǒng)會先分配一個叫name的private私有的內(nèi)存空間(此處的name對于類的內(nèi)部使用,Name對于外部操作使用,要有所區(qū)分)之后的讀與寫的操作都是通過Name這個public的類似于指針的東西來關(guān)聯(lián)name進行,以此達到封裝的目的,并且通過get和set關(guān)鍵字也可以控制可讀還是可寫。建議用后者,封裝的好處可以參考相關(guān)文檔,不再累述了~

    至于get和set的作用,除了控制讀寫之外還有其他的作用,舉個簡單的例子,比如說當(dāng)我給Name賦值的時候想要先進行一些邏輯判斷,就可以這樣:

        private string name;

        public string Name

        {

            get { return name; }

            set

            {

             name = String.IsNullOrEmpty(value) ? "空" : value;

            }

        }

 

再舉例說明下:

    假設(shè)類是一銀行,既能存錢也能取錢

    Private Money;

    Private class bank()

    {

      get

      {

         return Money;

      }

      Set

      {

         Money=value;

      }

    }

    Money 就像銀行里的自動取款機,你看不見里面的Money,但你能用set(存錢),用get(取錢)。Money是一個私有字段,是分裝在類中的,類以外的程序不能直接訪問的。C#中g(shù)et、set用法中,類的set和get成員是外部程序訪問類內(nèi)部屬性的唯一方法,就像你去銀行取錢,你不能直接從銀行的保險柜里拿錢,而是銀行營業(yè)人員把錢取出來給你的。

    屬性在調(diào)用者看來就像一個普通的變量,但作為類的設(shè)計者,你可以利用屬性來隱藏你類中的一些字段,使外界只能通過屬性來訪問你的字段,你可以通過屬性來限制外界對你的字段的存取,就利用get、set。如果想讓用戶隨意存取你的字段,那么就實現(xiàn)get、set;如果只想讓用戶讀取字段,就只實現(xiàn)get;若只想讓用戶寫字段就只實現(xiàn)set。同時還可以在set和get中對用戶傳遞的值進行一些驗證工作,以確保你的字段將含有正確的值。

    Private int a;

    Public int index

    {

      get

      {

        return a;

      }

      set

      {

         If (value>0)

           a=value;

         else

           a=0;

      }

    }

    可看出,get、set用法中一則是隱藏組件或類內(nèi)部的真實成員;

    二是用來建立約束的,比如,實現(xiàn)“有我沒你”這種約束;

    三是用來響應(yīng)屬性變化事件,當(dāng)屬性變化是做某事,只要寫在set方法里就行。

    當(dāng)你想讀出或?qū)懭雽傩缘闹禃r,存取標(biāo)志限定了被實現(xiàn)的語句。用于讀出屬性的值的存取標(biāo)志記為關(guān)鍵字get,而要修改屬性的值的讀寫符標(biāo)志記為set。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南皮县| 乡宁县| 琼海市| 安图县| 绥江县| 于都县| 靖西县| 象州县| 高雄市| 晋江市| 永宁县| 项城市| 潞城市| 建始县| 潞城市| 丽水市| 齐河县| 揭阳市| 盈江县| 松阳县| 铜陵市| 盖州市| 新安县| 连江县| 安阳市| 通渭县| 潜江市| 抚顺市| 灵台县| 自贡市| 安义县| 玉树县| 彭泽县| 民县| 呼图壁县| 南昌县| 同仁县| 民勤县| 海兴县| 醴陵市| 香格里拉县|