常量:指在程序編譯時已經存在且在程序生命周期內不會發生改變的值,用const定義一個常量。
private class TestA --定義一個類時后邊不加()
{
private const double Pi=3.14;
private double GetPi() --輸出pi值得方法,后邊帶()
{
double t=pi;
return t;
}
}
變量:
變量本身被用來存儲特定類型的數據,可以根據需要隨時改變變量中所存儲的數據值。變量具有名稱、類型和值。變量名是變量在程序源代碼中的標識。變量類型確定它所 代表的內 存的大小和類型,變量值是指它所代表的內存塊中的數據。在程序的執行過程中,變量的值可以發生變化。使用變量之前必須先聲明變量,即指定變量的類型和 名稱。
變量可以存儲值類型,也可以存儲引用類型
值類型變量:直接存儲其數據值,主要包括整數類型,浮點類型和布爾類型。
值類型變量在堆棧中進行分配,因此效率很高,使用值類型主要目的是為了提高性能,主要分為以下3種值類型。
(1)整數類型
(2)浮點類型
(3)布爾類型
引用類型變量:存儲的是其數據值得引用,引用類型變量可以引用同一對象,這種情形下,對一個變量的操作會影響另一個變量所引用的同一對象。 u引用類型被賦值前的 值都是null。
值類型和引用類型的區別:
public class Test
{
public int a=3; --值類型變量
string ss="1234455":
public string sq=ss; --引用類型變量
}
在變量類型后添加“?”表示可空值類型。
例如:
into a=null;
以上代碼VS會提示錯誤:無法將 Null 轉換成 “int” ,因為它是一種不可以為 null 值的類型。
但寫成以下格式就不會報錯了:
int? a=null;
值類型直接存儲其值,而引用類型存儲對其值得引用。值類型存儲在內存的棧中,而引用類型在內存的堆中存在對值得引用地址。
字段,屬性
字段是構成類結構的一種元素,它不僅可以用C#內置類型進行聲明,也可以用任意的自定義類型進行聲明,很明顯,它不僅可以保存一個值類型的實例,也可以保存一個引用類型的地址引用。字段可以直接定義在類或結構中。相比常量,它就多了一些特性,它不僅可以是類的狀態數據,也可以是實例的狀態數據,它默認並不是static,而是對象級的成員,除非明確指定其修飾符為static。字段可以使用的修飾符為: public、private、protected、internal 或 protected internal。另外,readonly也可以用於字段,如果再加上satic,此時它就相當於常量了,只不過對象級的字段初始化是在構造函數中進行的,類級的字段初始化是在靜態構造函數中進行的。如下代碼:
public class Code_03
{
public const double PAI = 3.14;
double radius = 20;
static int a = 10;
static readonly int b = 30;
}
常量是在編譯時計算,字段是在運行時計算,
const常量在聲明處進行初始化,編譯時直接將值編譯進元數據,運行時不能進行值更改(如下面代碼中的PAI)。
實例字段可在定義處和構造函數內進行初始化。可在任意處進行更改,如果其可訪問性允許(如下面代碼中的radius)。
static 字段聲明為類級的字段,它屬於類的狀態數據。可在任意處進行更改,如果其可訪問性允許(如下面代碼中的a)。
readonly 字段聲明只讀字段,只能在構造函數內對其進行更改(如下面代碼中的b)。
static readonly 字段聲明靜態只讀字段,它屬於類級且只讀。只能在靜態構造函數內對其更改(如下面代碼中的c)。
1 public class Code_03 2 { 3 public const double PAI = 3.14; 4 double radius = 20; 5 static int a = 10; 6 readonly int b = 0; 7 static readonly int c = 30; 8 9 static Code_03() 10 { 11 a = 100; 12 c = 1000; 13 //錯誤 非靜態的字段、方法或屬性“ConsoleApp.Example03.Code_03.c”要求對象引用 14 //radius = 1; 15 //b = -1; 16 } 17 public Code_03() 18 { 19 radius = 1; 20 a = -1; 21 b = -1; 22 //錯誤 無法對靜態只讀字段賦值(靜態構造函數或變量初始值中除外) 23 //c = -1; 24 } 25 public void MyMethod() 26 { 27 radius = 1; 28 a = -1; 29 //錯誤 無法對靜態只讀字段賦值(靜態構造函數或變量初始值中除外) 30 //b = -1; 31 //c = -1; 32 } 33 }
屬性:
字段通常保存着類或對象本身的狀態,我們當然可以將其公開為public讓外界對其進行讀、寫修改。從某種意義上來講,我們更希望在類本身內部對自己的狀態進行維護,並不希望外界對自己的狀態進行直接更改,以防止破壞這些數據,所幸的是還有一個數據成員可供使用,它就是屬性。
如果在外部要訪問某一個類的內部成員(私有字段),可以使用方法來達到目的,但如果對每一個字段都去編寫一個方法來進行讀寫操作似乎又麻煩了些。屬性以靈活的方式實現了對私有字段的訪問,它是一種“訪問器”方法,包括get方法和set方法,更明確地說,屬性就是方法的精簡寫法的實現,隱藏了實現和驗證的代碼。它有兩個訪問器:
get訪問器用於獲取屬性的值。
set訪問器用於設定屬性的值。既然它是方法,且是要在方法內對私有字段用新值進行更改替換,那么它就是可以(或者說是應該)接收參數的, value 關鍵字就是用於定義由 set 取值函數分配的值。假如有如下一個屬性的定義:
public class Code_03_2 { string _name; public string Name { get { return _name; } set { _name = value; } } }
這個定義是通過屬性Name對私有字段_name進行訪問
我們已經看出來,屬性是方法的實現,既然是方法,那方法就可以被訪問修飾符定義,如public、private等,來限定方法的可訪問性,很顯然,我們也可以對屬性的可訪問性進行限定,這里是對訪問器set和get進行訪問限定的
屬性還有一種更簡潔的寫法如下:
public int Age { get; set; }
public string Address { get; set; }
在編譯的時候,編譯器會自動生成對應的私有字段_age和_address,同樣也會生成相應的get_方法和set_方法。
方法,函數
在了解方式之前我們應該先了解一下類和對象
類:具有共同屬性和行為的的同一類事物的集合,如人類,電腦類
對象:對類的實例化成為對象,如人類中的張三,就是類的一個對象
定義一個人類,有Name和age屬性 public class Person { public string _name; pbublic string Name { get{this.Name=_name;} set{_name=value;} } public string _age; public string Age { get{this.Age=_age;} set{_age=value;} } }
上邊的代碼是定了一個人類,有姓名和年齡這兩個屬性
那么張三是怎么出來的呢?
實例化:
Person person =New Person();
person.Name='張三';
person.Age=20;
(也可以簡寫為:Person person=new Person(){Name='張三',Age=20};)
這樣就實話化出了一個人類的對象,張三
而方法 就是這些人類的可以做的行為,定義在類的內部,如張三可以喝水,生孩子
public class Person { // 屬性和字段的簡寫 在編譯時聲稱Name的字段和get set 方法 public string Name{get;set;} public int Age{get;set;} public string Heshui() { string Name=this.Name; return Name+"可以喝水"; } }
Person person=new Person(){Name='張三',Age=20};
person.heshui();
heshui就是Person類的一個方法,實例化一個對象之后就可以調用heshui()這個方法了。
常量,變量,方法等一般都有訪問修飾符來限制訪問權限
常用的訪問修飾符有:
private:私有成員,在類的內部可以訪問
public:公共成員,完全公開,沒有訪問限制
protected:保護成員,在類的內部和繼承類中可以訪問
internal:在同一命名空間內可以訪問

