工作這么長時間,一直對 屬性,字段,變量的定義不清晰.今天就詳細整理一下.
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)