標籤:shape 記憶體回收 紅色 結果 logs 比較 記憶體回收行程 http 瞭解
一、物件導向:建立一個對象,這個對象最終會幫你實現你的需求,儘管其中的過程非常曲折艱難。這也就是所謂的“你辦事我放心”。
例如:
物件導向:摺紙
爸爸開心地用紙折成了一個紙鶴;
媽媽不開心地用紙折成了一隻小豬;
妹妹把紙變成了一朵玫瑰花。
紙作為一個對象,可以被折成紙鶴,小豬和玫瑰花,而不用關心是誰怎樣折出來的。
物件導向三大特徵:封裝、繼承、多態。
二、對象:現實中存在的事物,本質是類的執行個體,存在棧的一個變數。可以通過對象的屬性(特徵)和方法(行為)來描述這個對象。
例如:
藍色妖姬這個對象
中文學名(屬性):玫瑰花(屬性值)
科(屬性):薔薇科(屬性值)
顏色(屬性):藍色(屬性值)
方法(行為):藍色妖姬性喜陽光,耐寒、耐旱,適應性較強。
對象的初始化:建立好一個類的對象後,為這個對象的屬性賦值的過程。
三、類:把具有相同屬性和相同方法的對象進一步封裝從而抽象出來的概念。類是個模型,根據類建立出來對象,並確定了對象應該具有的屬性和方法。
文法:
[public] class 類名
{
欄位;//欄位的命名一般在前加底線,如_name
屬性;
方法;
}
1、類的執行個體化:建立這個類的對象的過程。其中類是不佔記憶體而對象是占記憶體的。
例如:
//定義一個水果類
public class Fruit
{
//欄位:儲存資料
string _name; //水果的名字
string _shape;//形狀
string _color;//顏色
double _weight;//重量
//方法
public void output()//輸出水果的資料
{
Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this._name, this._shape, this._color, this._weight);
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit(); //類的執行個體化
apple._name = "蘋果";
apple._shape = "圓";
apple._color = "無";
apple._weight = 250;
apple.output();
Console.ReadKey();
}
} //輸出結果:蘋果是圓形的,顏色是紅色,平均重量為250克。
2、屬性:對欄位進行再處理,限定對欄位的賦值和取值,不讓外界輕易訪問到欄位,以達到保護欄位的作用。所以一般屬性是public而欄位是private的,讓欄位只能在當前類訪問。欄位是不儲存資料的,因為它會把資料返回給欄位。
1)屬性的本質就是兩個方法,一個是get(),用來取值;一個是set(),用來賦值。
例如:
//把上面的水果類加入屬性對欄位進行保護
public class Fruit
{
//欄位
string _name;
//屬性
public string Name
{
get { return _name; } //當輸出屬性值時,執行get方法。當對get()操作時,對欄位的值操作,因為此時欄位已被賦值。
set { _name = value; } //當給屬性賦值時,首先執行set方法。當對set()操作時,應對value操作。
}
string _shape;
public string Shape
{
get { return _shape; }
set { _shape = value; }
}
string _color;
public string Color //當水果的顏色輸入為無的時候,限定_color的值為紅
{
get { return _color; }
set {
if (value == "無")
{
value = "紅";
}
_color = value;
}
}
double _weight;
public double Weight //當水果的重量輸入小於0時,限定_weight的值為10
{
get {
if (_weight < 0)
{
return _weight = 10;
}
return _weight;
}
set { _weight = value; }
}
//方法
public void output()
{
Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this.Name, this.Shape, this.Color, this.Weight); //當有屬性時,訪問的是屬性而不是欄位,可以與上一個例子進行比較
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit("蘋果", "圓", "無", 250); //執行個體化對象
apple.Name = "蘋果"; //訪問的是屬性,此時欄位已被保護
apple.Shape = "圓";
apple.Color = "無";
apple.Weight = 250;
apple.output();
Console.ReadKey();
}
}//輸出結果:蘋果是圓形的,顏色是紅色,平均重量為250克。
2)因為屬性不一定都有get()和set()這兩種方法,所以又分為:
a、可讀可寫屬性:既有get()又有set()。
b、唯讀屬性:只有get()。
c、唯寫屬性:只有set()。
3、靜態類和非靜態
靜態類:當你想要把你的類當作工具類去使用,也就是會經常使用時,比如說console類。
1)靜態類中只允許有靜態成員,不能訪問執行個體成員;
2)調用靜態成員是,通過類名.靜態成員來訪問,調用簡單,不用建立對象;
3)靜態類在整個項目中實現資源共用,因為靜態儲存地區誰都可以訪問;
4)當全部運行程式都結束的時候,靜態類才會釋放資源。因為存在記憶體回收行程(GC)。
非靜態類:
1)非靜態類中既可以有執行個體成員,又可以有靜態成員;
2)調用執行個體成員時,通過對象名.執行個體成員來訪問;
3)執行個體化可以自動銷毀。
4、建構函式:是一種特殊的方法,用來建立對象,可以在函數中對對象進行初始化,也就是給對象的每個屬性依次賦值。
1)建構函式的名稱要跟類的名稱一樣,修飾符必須是public;
2)建構函式沒有傳回值;
3)建構函式可以進行重載;
4)建立對象時執行建構函式;
5)類中會有個預設的無參數的建構函式,當寫了個新的建構函式時,預設的會被替代。
例如:
public class Fruit
{
//欄位
string _name;
//屬性
public string Name
{
get { return _name; }
set { _name = value; }
}
string _shape;
public string Shape
{
get { return _shape; }
set { _shape = value; }
}
string _color;
public string Color
{
get { return _color; }
set {
if (value == "無")
{
value = "紅";
}
_color = value;
}
}
double _weight;
public double Weight
{
get {
if (_weight < 0)
{
return _weight = 10;
}
return _weight;
}
set { _weight = value; }
}
//建構函式
public Fruit(string name, string share, string color, double weight)
{
this.Name = name;
this.Shape = share;
this.Color = color;
this.Weight = weight;
}
//建構函式的重載
public Fruit(string name, string share):this(name ,share , "" ,0) //通過:this()調用本類的建構函式
{
}
//方法
public void output()
{
Console.WriteLine("{0}是{1}形的,顏色是{2}色,平均重量為{3}克。", this.Name, this.Shape, this.Color, this.Weight);
}
}
class Program
{
static void Main(string[] args)
{
Fruit apple = new Fruit("蘋果", "圓");//調用重載建構函式
//Fruit apple = new Fruit("蘋果", "圓", "無", 250); //調用建構函式,想讓大家瞭解建構函式的重載所以先注釋掉
apple.output();
Console.ReadKey();
}
}//輸出結果:蘋果是圓形的,顏色是色,平均重量為克。(注意這個是重載建構函式)
5、解構函式
1)命名跟類名一樣;
2)當程式結束時進行,可以協助我們馬上釋放資源(釋放對象);
3)不帶修飾符或參數;
4)不能被調用,它是被動被編譯器調用的;
5)一個類只能有一個解構器,不能被重載或是繼承(這點跟建構函式不同);
文法:
~class()
{
// Cleaning up code goes here
}
6、關鍵字new
1)在記憶體中開闢一塊空間;
2)在記憶體空間建立對象;
3)調用對象的建構函式對對象進行初始化(也因此建構函式的修飾符必須是public)。
7、關鍵字this
1)代表當前類的對象;
2)在類中顯示調用本類的建構函式,文法 :this()。
參考網址:http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html
C#物件導向(初級)