欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入C#中g(shù)et與set的詳解

 更新時(shí)間:2013年06月05日 15:46:04   作者:  
本篇文章是對(duì)C#中的get與set進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
釋一:
屬性的訪問(wèn)器包含與獲?。ㄗx取或計(jì)算)或設(shè)置(寫)屬性有關(guān)的可執(zhí)行語(yǔ)句。訪問(wèn)器聲明可以包含 get 訪問(wèn)器或 set 訪問(wèn)器,或者兩者均包含。聲明采用下列形式之一:
get {}
set {}
get 訪問(wèn)器
get 訪問(wèn)器體與方法體相似。它必須返回屬性類型的值。執(zhí)行 get 訪問(wèn)器相當(dāng)于讀取字段的值。以下是返回私有字段 name 的值的 get 訪問(wèn)器:
復(fù)制代碼 代碼如下:

private string name;   // the name field
public string Name   // the Name property
{
   get
   {
      return name;
   }
}

當(dāng)引用屬性時(shí),除非該屬性為賦值目標(biāo),否則將調(diào)用 get 訪問(wèn)器讀取該屬性的值。例如:
Employee e1 = new Employee();
...
Console.Write(e1.Name);   // The get accessor is invoked here
get 訪問(wèn)器必須在 return 或 throw 語(yǔ)句中終止,并且控制不能超出訪問(wèn)器體。
set 訪問(wèn)器
set 訪問(wèn)器與返回 void 的方法類似。它使用稱為 value 的隱式參數(shù),此參數(shù)的類型是屬性的類型。在下例中,set 訪問(wèn)器被添加到 Name 屬性:
復(fù)制代碼 代碼如下:

public string Name
{
   get
   {
      return name;
   }
   set
   {
      name = value;
   }
}

當(dāng)對(duì)屬性賦值時(shí),用提供新值的參數(shù)調(diào)用 set 訪問(wèn)器。例如:
e1.Name = "Joe";   // The set accessor is invoked here
在 set 訪問(wèn)器中對(duì)局部變量聲明使用隱式參數(shù)名 (value) 是錯(cuò)誤的。
備注
屬性按如下方式,根據(jù)所使用的訪問(wèn)器進(jìn)行分類:
只帶有 get 訪問(wèn)器的屬性稱為只讀屬性。無(wú)法對(duì)只讀屬性賦值。
只帶有 set 訪問(wèn)器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標(biāo)外,無(wú)法對(duì)其進(jìn)行引用。
同時(shí)帶有 get 和 set 訪問(wèn)器的屬性為讀寫屬性。
在屬性聲明中,get 和 set 訪問(wèn)器都必須在屬性體的內(nèi)部聲明。
使用 get 訪問(wèn)器更改對(duì)象的狀態(tài)是一種錯(cuò)誤的編程樣式。例如,以下訪問(wèn)器在每次訪問(wèn) number 字段時(shí)都產(chǎn)生更改對(duì)象狀態(tài)的副作用。
復(fù)制代碼 代碼如下:

public int Number
{
   get
   {
      return number++;   // Don't do this
   }
}

可以將 get 訪問(wèn)器用于返回字段值,或用于計(jì)算字段值并將其返回。例如:
復(fù)制代碼 代碼如下:

public string Name
{
   get
   {
      return name != null ? name : "NA";
   }
}

在上述代碼段中,如果不對(duì) Name 屬性賦值,它將返回值 NA。
示例 1
此例說(shuō)明如何訪問(wèn)基類中被派生類中具有同一名稱的另一個(gè)屬性隱藏的屬性。
復(fù)制代碼 代碼如下:

// property_hiding.cs
// Property hiding
using System;
public class BaseClass
{
   private string name;
   public string Name
   {
      get
      {
         return name;
      }
      set
      {
         name = value;
      }
   }
}
public class DerivedClass : BaseClass
{
   private string name;
   public new string Name   // Notice the use of the new modifier
   {
      get
      {
         return name;
      }
      set
      {
         name = value;
      }
   }
}
public class MainClass
{
   public static void Main()
   {
      DerivedClass d1 = new DerivedClass();
      d1.Name = "John"; // Derived class property
      Console.WriteLine("Name in the derived class is: {0}",d1.Name);
      ((BaseClass)d1).Name = "Mary"; // Base class property
      Console.WriteLine("Name in the base class is: {0}",
         ((BaseClass)d1).Name);  
   }
}

輸出
Name in the derived class is: John
Name in the base class is: Mary
以下是上例中顯示的重點(diǎn):
派生類中的屬性 Name 隱藏基類中的屬性 Name。在這種情況下,派生類的該屬性聲明使用 new 修飾符:
   public new string Name
   {
   ...
轉(zhuǎn)換 (BaseClass) 用于訪問(wèn)基類中的隱藏屬性:
   ((BaseClass)d1).Name = "Mary";

釋二:
代碼如下:
復(fù)制代碼 代碼如下:

public class Car
{private string color;
 public string Color
 {
   get
   {return color;
    }
   set
    {color=value;
    }
  }
}

我的理解是:通過(guò)GET和SET對(duì)公有變量Color進(jìn)行讀寫操作,實(shí)際就是間接更改color私有變量的值,那既然如此。為何不設(shè)color為public,讓實(shí)例進(jìn)接對(duì)color進(jìn)行讀寫操作呢?

如果有一天,老板讓你把這個(gè)類改成
當(dāng)汽車的顏色改變時(shí),同時(shí)計(jì)算一下汽車的《價(jià)格》屬性
那么如果直接對(duì)Color操作,你不是死定了?

“屬性”是.net的特色之一。
其實(shí)就相當(dāng)于方法,尤其是java中經(jīng)常會(huì)用到get、set方法(.net的有些思想就是java的)。

屬性的真實(shí)作用不只是為了更改某個(gè)成員變量的值
比如form的size屬性在set的同時(shí)要重畫form,如果你不想讓用戶對(duì)color修改,就不要提供set方法

是面向?qū)ο缶哂械?BR>set and get
它的用途:一般是對(duì)類里面的變量進(jìn)行操作. 而不是直接對(duì)類的變量進(jìn)行操作.
有一個(gè)很大的作用就是:便于維護(hù).
因?yàn)?
如果一個(gè)類的一個(gè)變量int a ,在其它包或命名空間類中使用了1000次,但是過(guò)了許久,你想把a(bǔ)改為b,
如果直接對(duì)變量a操作的話,就得需求修改整個(gè)程序的1000處.  如果用屬性了,就不會(huì)了,只需改這個(gè)方法即可
復(fù)制代碼 代碼如下:

public int A
{
 set
 {
   a = value;
 }
 get
 {
   return a;
 }
}
放為:
public int B
{
 set
 {
   b = value;
 }
 get
 {
   return b;
 }
}

除去這個(gè)屬性之外的地方根本不需要改變
通過(guò)上面的講解。有一點(diǎn)點(diǎn)明白了。
是不是讓滿足一定條件讓GET和SET來(lái)改變類中的私有變量。而不能讓實(shí)例直接操作。像上面的代碼保證了color屬性的安全性。
既然如此可不可以寫成
復(fù)制代碼 代碼如下:

set
{color=value*20;  //value是不是相當(dāng)于Color的值
}

我當(dāng)初和你有一樣的想法.但是現(xiàn)在改變了。
舉個(gè)例子說(shuō)明一下吧.
復(fù)制代碼 代碼如下:

public class Car
{
 public string Color
 {
   get
   {
      if(this.viewstate["color"]!= null)
       {
       return this.viewstate["color"];
       }
       return "":
    }
   set
    {
      this.viewstate["color"];=value;
    }
  }
}

在asp.net中通常這么使用.如果用變量的話就不好使用了。而且get,set中可以寫多個(gè)語(yǔ)句.如上的get.
不知道這樣解釋你滿意嗎?

相關(guān)文章

  • C# newtonsoft.json中文亂碼問(wèn)號(hào)的解決方案

    C# newtonsoft.json中文亂碼問(wèn)號(hào)的解決方案

    這篇文章主要介紹了C# newtonsoft.json中文亂碼問(wèn)號(hào)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C#中的委托、事件學(xué)習(xí)筆記

    C#中的委托、事件學(xué)習(xí)筆記

    這篇文章主要介紹了C#中的委托、事件學(xué)習(xí)筆記,本文講解了委托delegate、事件的相關(guān)知識(shí)并給出代碼實(shí)例,需要的朋友可以參考下
    2015-01-01
  • C#寫差異文件備份工具的示例

    C#寫差異文件備份工具的示例

    這篇文章主要介紹了C#寫差異文件備份工具的示例,幫助大家利用c#備份,管理文件,感興趣的朋友可以了解下
    2020-10-10
  • C#開(kāi)發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    C#開(kāi)發(fā)微信門戶及應(yīng)用(3) 文本消息和圖文消息應(yīng)答

    這篇文章主要為大家詳細(xì)介紹了C#開(kāi)發(fā)微信門戶及應(yīng)用第二篇,微信文本消息和圖文消息的應(yīng)答,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#關(guān)于Task.Yeild()函數(shù)的討論

    C#關(guān)于Task.Yeild()函數(shù)的討論

    這篇文章主要介紹了C#中關(guān)于Task.Yeild()函數(shù)的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 詳解C# 代碼占用的空間

    詳解C# 代碼占用的空間

    這篇文章主要介紹了C# 代碼占用的空間的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C#使用TextBox作數(shù)據(jù)輸入方法

    C#使用TextBox作數(shù)據(jù)輸入方法

    筆者最近需要上位機(jī)與下位機(jī)進(jìn)行數(shù)據(jù)交互,在廣泛參考大佬的資料后,較為完善地使用Textbox控件進(jìn)行數(shù)據(jù)輸入的功能。感興趣的可以了解一下
    2021-06-06
  • C# JavaScriptSerializer序列化時(shí)的時(shí)間處理詳解

    C# JavaScriptSerializer序列化時(shí)的時(shí)間處理詳解

    這篇文章主要為大家詳細(xì)介紹了C# JavaScriptSerializer序列化時(shí)的時(shí)間處理詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#創(chuàng)建一個(gè)Word并打開(kāi)的方法

    C#創(chuàng)建一個(gè)Word并打開(kāi)的方法

    這篇文章主要介紹了C#創(chuàng)建一個(gè)Word并打開(kāi)的方法,實(shí)例分析了C#操作word的常用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn)

    C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn)

    本文主要介紹了C#以太網(wǎng)Sockets客戶端設(shè)計(jì)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評(píng)論