欄位、屬性、構造函數、this、new、base
Q:Field(字段/欄位)是幹什麼的?
儲存數據用的
Q:屬性是幹什麼的?
保護Field(字段/欄位)用的
Q:構造函數是幹什麼的?
初始化對象(物件)
初始化對象(物件)說白了,就是給對象(物件)的每一個屬性去賦值。
Q:什麼時候會調用構造函數?
當我們new的時候會調用構造函數,
this 關鍵字
this 有兩個作用
- 當前類的對象(物件)
- 調用自己的構造函數
new 關鍵字
new 有什麼作用?
- 創建對象。我們創建對象(物件)的時候要用
new。 - 隱藏父類成員。隱藏從父類那邊繼承過來的成員。
子類的成員 跟父類成員的名稱一樣,會將父類的成員隱藏,隱藏帶來的效果是什麼?子類調不到父類的成員。如果你是故意這麼做的話,就要在返回值前面加個 new
1
2
3
4
5
6
7
8
9
10
11
12
public class Person
{
public void T()
{
}
}
public class Teacher : Person
{
public new void T() //如果故意要跟父類同名,要加new
{
}
}
警告CS0108 ‘Teacher.T()’ 會隱藏繼承的成員 ‘Person.T()’ 若本意即為要隱藏,請使用 new 關鍵字。
base 關鍵字
base調用父類的構造函數,在子類中調用父類重名的方法
繼承:
繼承是指類別與類別之間的關係
多型
virtual虛方法、abstract 抽象類、interface 介面
interface 介面
- 介面存在的意義:多型。多型的意義:程序可擴展性
- 介面解決了類別多繼承的問題
- 介面之間可以多繼承。
物件導向
什麼是面向對象(物件導向)
- 一種分析問題的方式(增強了程序的可擴展性)
- 面向對象(物件導向)三大特性:封裝、繼承、多態(多型)
類和對象(類別和物件)
- 類別:類是一個模子,確定對象將會挪有的特徵(屬性)和行為(方法)
- 物件:對象(物件)是一個你能夠看得到、摸得著的具體實體—–萬物皆物件
什麼是類(類別)?什麼是對象(物件)?類和對象的區別?
物件 & 類別 = 大樓 & 藍圖 這個大樓是根據設計藍圖構造出來的,圖紙上有什麼東西,咱們這個大樓裡面是不是也得有什麼東西,對吧。
- 類別算是一個藍圖、一個範本、一個可參考的文件,他沒有 實體 (Instance) 的概念,屬靜態的。
物件是一個看的到、摸的到的實體,屬於動態的,狀態會隨時改變,但架構與行為不會改變。
- 類是模具、創建對象的模具、抽象的
- 類是一種數據類型,用戶自定義的數據類型
- 類的組成:字段、屬性、方法、構造函數等
- 對象是具體的,是類的具體實例。對象具有屬性(特徵)和方法(行為)
- 類中包含了數據(用字段表示)與行為(用方法/函數/功能)表示
- 方法為一塊具有名稱的代碼
- this 當前對象,顯示的調用自己的構造函數
- base 調用父類的構造函數,在子類中調用父類的重名方法
知識點總結
- 類別對物件本身就是封裝的體現
- 1.屬性封裝了Field(字段/欄位)、
- 2.方法的多個參數封裝成了一個對象、
- 3.將一堆代碼封裝到了一個小程序集中(dll、exe)。將一坨程序封裝起來到一個程序集當中
- 繼承是指類別與類別之間的關係
- 為什麼要繼承?繼承帶給我們的好處?代碼重用
- LSP里氏轉換原則(聲明父類類型變量,指向子類類型對象,以及調用方法時的一些問題)、多態(多型)、類的單根繼承性、傳遞性、繼承時構造函數的問題
- 所有的類都直接或間接的繼承自object類
繼承中的訪問修飾符問題
- [C# 筆記] C#中的訪問修飾符(存取修飾詞)
- 存取修飾詞 (C# 參考)