C#中的屬性,字段,變量


工作這么長時間,一直對 屬性,字段,變量的定義不清晰.今天就詳細整理一下.

C#中的變量

內存:用戶存儲正在運行的程序數據RAM(隨機存儲器)斷電后里面的數據丟失

變量代表這一塊內存空間,我們可以通過變量名稱向內存存/取數據.有變量就不需要我們記憶復雜的內存地址了.

先向計算機申請一塊內存空間,考慮往內存方的數據類型,向內存申請一塊內存空間的語法:

int number;//申請開辟一塊內存空間

number=1000;//把1000放到number中

Console.WriteLine(number);

Console.ReadKey();

變量可以類中,方法中聲明...

字段

"字段"是直接在"類"或"結構"中聲明的任何類型的變量。字段是其包含類型的"成員".(簡單的說,字段就是直接出現在類或結構中的變量)

類或結構可以擁有實例字段或靜態字段.或同時擁有兩者。實例字段特定於類型的實例。如果您擁有類T和實例字段F,可以創建類型T的兩個對象,並修改每個

對象中的F的值,這不影響另一對象中的該值.相比之下,靜態字段屬於類本身,在該類的所有實例中共享.從實例A所做的更改將立刻呈現在實例B和C上(如果他們訪問該字段)

通常應僅為具有私有或受保護可訪問性的變量使用字段.您的類向客戶端代碼公開的數據應通過"方法","屬性","索引器"提供.通過使用這些構造間接訪問內部字段,可以針對

無效的輸入值提供防護.存儲由公共屬性公開的數據的私有字段稱為"后備存儲"或"支持字段".

字段通常存儲這樣的數據:該數據必須可供多個類方法訪問,並且其存儲期必須長於任何單個方法的生存期.例如,表示日歷日期的類可能有3個整數字段:一個表示月份,一個表

示日期,一個表示年份.如果一個變量只在某個方法范圍內使用 那么 應該在方法體自身范圍內聲明為局部變量。

在類塊中通過指定字段的訪問級別,然后指定字段的類型,在指定字段的名稱來聲明這些字段.例如:

public class CalendarEntry

{

  //私有字段

  private DateTime date;

  //公共字段(一般不推薦)

  public string day;

  //公共屬性為date字段提供安全性

  public DateTime Date

  {

    get{return date;}

    set

    {

      //設置可能出生日期的合理邊界

      if(value.Year>1900&&value.Year<=DateTime.Today.Year)  

      {

        date=value;

      }

      else

        throw new ArgumentOutOfRangeException();  

    }

  }

  //公共方法為date字段提供安全性

  //例如:birthday.SetDate("1975,6,30");  

  public void SetDate(string dateString)

  {

    DateTime dt=Convert.ToDateTime(dateString);

    //設置出生日期的合理邊界

    if(dt.Year>1900&&dt.Year<=DateTime.Today.Year)

    {

      date=dt;

    }

    else

      throw new ArgumentOutOfRangeException();

  }

  public TimeSpan GetTimeSpan(string dateString)

  {

    DateTime dt=Convert.ToDateTime(dateString);

    if(dt!=null&&dt.Ticks<date.Ticks)

    {

      return date-dt;

    }

    else

      throw new ArgumentOutOfRangeException();    

  }

}

 若要訪問對象中的字段,請在對象名稱后面添加一個句點,然后添加該字段的名稱,比如objectname.fieldname.例如:

 CalendarEntry birthday=new CalendarEntry();

 bitrhday.day="Saturday";

 聲明字段時可以使用賦值運算符為字段指定一個初始值。例如,若要自動將"Monday賦給"day字段,需要聲明day,如下例所示:

 public class CalendarDateWithInitialization

 {

  public string day="Monday";

}

字段的初始化緊靠調用對象實例的構造函數之前.如果構造函數為字段賦值,則該值將覆蓋字段聲明期間給出的任何值

說明:字段初始值設定項不能引用其他實例字段.

屬性

屬性是面向對象編程的基本概念,提供了對私有字段的訪問封裝,在C#中以get和set訪問器方法實現對可讀可寫屬性的操作,

提供了安全和靈活的數據訪問封裝.(這里與上面字段介紹 相呼應)

屬性是這樣的成員:它提供靈活的機制來讀取,編寫或計算某個私有字段的值.可以像使用公共數據成員一樣使用屬性,但實際上它們是稱作"訪問器"的特殊方法.這使得可以輕松訪問數據,此外還有助於提高方法

的安全性和靈活性.

示例1:

public class MyProperty

{

  //定義字段

  private string name;

  private int age;

  //定義屬性,實現對 name字段的封裝

  public string Name

  {

    set{name=value;}

    get

    {

      if(name==null)

        return string.Empty;

      else

        return name;            

    }

  }

  //定義屬性,實現對age字段的封裝

  //加入對字段的范圍控制

  public int Age

  {

    get{return age;}

    set

    {

      if(value>0)&&(value<150)

      {

        age=value;    

      }

      else

      {

        throw new Exception("Not a real age");

      }

    }

  }

}

public class MyTest

{

  public static void Main(string[] args)

  {

    MyProperty myProperty=new MyProperty();

    //觸發set訪問器

    myProperty.Name="Anytao"

    //觸發get訪問器

    Console.WriteLine(myProperty.Name);

  }

}

示例2:

在本示例中,TimePeriod類存儲了一個時間段.在內部,類以秒為單位存儲時間,但客戶端使用名為Hours的屬性能夠以小時為單位指定時間.Hours屬性的訪問器執行小時和秒之間的轉換.

class TimePeriod

{

  private double seconds;

  public double Hours

  {

    get{return second/3600;}

    set{second=value*3600}

  }

}

class Program

{

  static void Main()

  {

    TimePeriod t=new TimePeriod();

    //設置Hours屬性自動調用set方法

    t.Hours=24;

    //得到Hours屬性,自動調用get方法

    System.Console.WriteLine("Time in Hours:"+t.Hours);

  }

}

屬性概述

屬性使類能夠以一種公開的方法獲取和設置值,同時隱藏實現或驗證代碼.

get屬性訪問器用於返回屬性值,而set訪問器用於分配新值.這些訪問器可以有不同的訪問級別.有關更多信息,請參見 "限制訪問器可訪問性(C#編程指南)".

value關鍵字用於定義由set取值函數分配的值.

不實現set取值函數的屬性是只讀的.

對於不需要任何自定義訪問器代碼的簡單屬性,可考慮選擇使用自動實現的屬性.有關更多信息,請參見"自動實現的屬性(C#編程指南)"

 

 

 

 

以上是個人整理的 有關 字段,變量,屬性的詳細解釋.示例代碼,只做參考,並未測試功能。。。。Lurrykong(2013.6.28)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM