C#基礎學習C# 8.0 In a Nut Shell
Field 其實就是變數,但是英文裡面是field,欄位,域名。為啥要這麼取名是因為面向物件程式設計,發明類,事兒多,什麼防止變數被修改什麼的,所以發明了屬性property
屬性就是用函式來操縱變數,也即這個欄位,field。所以獨立用欄位的類,不怎麼好(大概是這個意思)。
然後,類要初始化,初始化變數怎麼辦?取名Constructor,翻譯過來是建構,構造(心理學的構造主義,建構主義心理學 就是這個詞彙),構造一下,等於初始化。
為了要讓初始化明顯,取名和類名是需要一樣的。這裡類名是UnitConverter(單位換算類),那麼建構函式,也叫做UnitConverter。
可見,為了實現類,面向物件的程式設計方法,可是苦了編譯器,編譯器做了很多工作。(還有語言本身的工作)
接下去是叫做方法,這個是又是為了區別函式發明的,本質上和函式一樣,在類裡面,建構函式,等之類,可以叫函式,自定義函式,或者屬性函式(為了操縱變數,也即欄位發明的概念),
統統叫做,方法,method,注意,method 就是 函式 function ,函式就是method ,只是場景不同,所以又發明一個詞彙,混淆視聽。唉。
?
繼續,
UnitConverter feetToInchesConverter = new UnitConverter (12);
例項化一個類,並且初始化的值為12.
注意,這裡的新名詞,例項化。本質上,int x = 30 ,這種是C#或編譯器預先定義的型別,當然後臺肯定實現了的,並不是天然就有的。
Int 就是預設型別,預定義型別。現在UnitConverter 寫在變數名 feetToInchesConverter 前面,類比 int x
Int x = 30 ,這個很簡單,當然內部機制是什麼我們暫且不管。
UnitConverter feetToInchesConverter = new UnitConverter (12) 而這個 需要關鍵字 new ,區分它是不一樣的變數,這裡升級為"類"
所以叫做例項化。等價於我們自己定義一個類,自己弄型別,區分int
當然,初始化的值為12,傳給誰?當然是傳給裡面的建構函式(或者叫做構造方法,反正函式和方法在我這裡筆記上就亂用了
?
Console.WriteLine (feetToInchesConverter.Convert (30));
這句話,用點號,呼叫Convert方法(函式),把30傳入進去。
函式(方法)內部是這樣的:
其中,那個ratio 新new類的時候,已經被建構函式,構造好了,所以是12
其次,那個unit是傳入的值 ,為30
所以返回的值是 12*30 = 360
?
執行結果:
?
總結:
類 UnitConverter 和 int 型別的區別
- 一個是預定義,一個是自定義
- 一個是單純一點,一個是複雜點,有自己定義的方法和屬性和欄位和函式。當然,C#裡面是面向物件的,所以就連int也有方法,或者
函式
比如int型別有 toString的強制轉換函式
?
類的初始化 或者 例項化的單詞 是initialization,詞彙是 instantiates an object
?
?
?
?
// The instance field Name pertains to an instance of a particular Panda, // whereas Population pertains to the set of all Pandas: ? public class Panda { ????public string Name; // Instance field ????public static int Population; // Static field ? ????public Panda (string n) // Constructor ????{ ????????Name = n; // Assign the instance field ????????Population = Population + 1; // Increment the static Population field ????} } ? static void Main() { ????Panda p1 = new Panda ("Pan Dee"); ????Panda p2 = new Panda ("Pan Dah"); ? ????Console.WriteLine (p1.Name); // Pan Dee ????Console.WriteLine (p2.Name); // Pan Dah ? ????Console.WriteLine (Panda.Population); // 2 } |
?
執行結果:
又發明了一個詞,叫做static,翻譯過來是靜態的意思。就是執行的時候一直駐留在記憶體裡,反覆呼叫不銷燬(只是我的粗狂理解,並不是真的如此,我知道計算機知識程式設計知識用這種黑盒子或者叫做知識遮蔽,循序漸進是有用的)
所以欄位Population是2
?
?
結構體
?
?
?
類是引用的
?
?
?
?