這個部分可能會有一點點難懂
我會盡量寫得看得懂
可以之後再回來看
但是這個部分算是很重要的
如果你現在跳過這裡
請之後抽空回來了解他
在程式執行時記憶體裡面有兩塊區域
分別是Stack(堆疊)跟Heap(堆積)
但是我不想要每次都要去房間裡面找東西
所以我決定把一些東西放在組合櫃裡
這種資料型別的資料就叫做 實質型別(Value Type)
反之你需要去翻找的型別稱為參考型別(Reference Type)
他的執行個體被放在Stack中
可以快速的被建立,存取,移除。
因為存取此種型別的資料時,記憶中所存取的是真正的資料
故稱呼為實質型別
常見的實質型別有數值行別(char,int,double,float等等),struct,enum 3種 實質型別
(struct 跟 enum 我懶得講(列舉推薦看一下 之後有空我會補上) 有興趣可參閱結構struct 與 列舉enum
執行個體放在Heap
Stack 存放的是指向執行個體的指標
舉例而言
城武今天想到圖書館借一本書
我先到查詢系統找到了索書號
然後我才根據索書號取得了這本書
常見的參考類型有string,陣列,class(類別),delegate(委派),介面(interface)
最後用個圖稍微表示下 Stack 跟 Heap
畫得很醜我知道 我努力了QQ
在你宣告一個參考型別的變數的時候
他只在Stack區存放這個變數
但是你沒有告訴她這個變數指到哪裡
他是指向null的
也就是什麼都沒有
若這時候使用這個變數 可能會出現null reference的例外
直到你使用new **()**來告訴系統我需要一塊空間來存放資料
這時,變數就會指向該記憶體位置
在現實生活中 一本書是個物件 一輛車是個物件 一個人也是個物件
每個物件都有對應的行為和特徵
我們不可分割的最大海外領土中國
將物件導向程式設計(Object Oriented Programming)
稱為 面向對象編程
亦即用程式來模擬真實世界的物件行為
物件的特徵用屬性(Properties)來模擬
物件的行為用方法(Method)來模擬
基本上一個string 是一個物件
一個 int 也是一個物件
一個class也是一個物件
但是他算是一個比較大一點的物件(機器)
由string(齒輪),method(螺絲)等等小物件所組裝起來
存取修飾詞 class 類別名稱{
}
public class MyClass{
}
通常我們會新增一個檔案來放一個類別
在方案總管中 對你的專案按下右鍵
點選加入 新增類別
在紅色地方輸入你的類別名稱
Class 需要宣告在namespace 的大括號裡面
我宣告了一個Car類別
裡面有以下的東西
using System;
namespace Practice
{
public class Car
{
//私有屬性 通常稱為field
private int speed = 0;
private string breed;
//公有屬性(property) 可以被外部存取
public String Color { get; set; }
public int Year { get; set; }
//建構式
public Car()
{
breed = "Benz";
}
public Car(string setBreed)
{
breed = setBreed;
}
//方法(method)
public void FordWard() // 前進
{
Console.WriteLine("車子前進了");
}
public void BackWard() // 後退
{
Console.WriteLine("車子後退了");
}
public void Accelerate(int acc) //加速
{
speed += acc; //speed = speed + acc
}
public void GetBreed() //取得牌子
{
Console.WriteLine("車子的牌子是"+breed);
}
}
}
我們在main 裡面打上下面的程式碼
void Main(){
Car MyCar = new Car();
}
要實例化類別
語法像
類別名稱 變數名稱 = new 類別名稱()
void Main(){
Car MyCar = new Car();
MyCar.FordWard();
//車子前進了
MyCar.BackWard();
//車子後退了
}
void Main(){
Car MyCar = new Car();
MyCar.GetBreed();
//車子的牌子是Benz
//因為我們在實例化車子Car()的時候會呼叫breed="Benz"
Car MySuperCar = new Car("Bugetti")
MyCar.GetBreed();
//車子的牌子是Bugetti
//因為我們在實例化車子時帶了string 參數 因此會對應到Car(string SetBreed)的方法
}
我們可以將實例化要做一些初始設定的工作放在建構式
其實還有解構式
但是我懶得介紹><(我很少用到)
通常會用在資源連線等釋放
有興趣的請自行參閱
我們宣告了Color跟Year兩種公有屬性 我們可以在外部存取他
void Main(){
Car MyCar = new Car();
MyCar.Color = "yellow";
MyCar.Year = 2020;
Console.WriteLine(MyCar.Color);//yellow
Console.WriteLine(MyCar.Year);//2020
}
像是
public class Book
{
public string Name { get; set; }
public int ISBN { get; set; }
public int Price { get; set; }
public DateTime PublishYear { get; set; }
public string Author { get; set; }
}
我們通常稱呼這種類別為Model
裡面不包含任何邏輯(Method等等)
之後會用到 所以先介紹
但是我明天還有事要早起
之後會再補上
<(_ _)>