幾個重要的問題:
c#強調封裝,在程序中,只有一個一個類,沒有像js一樣類似于主執行語句的那些東西。主執行的那些東西靠的是main函數來實現的。(所以js才有(function(){})這種立即執行的語法規則)
c#中字段設置的意義:字段為了保持私有性,能不給的盡量不給,防止出錯,所以字段只能內部使用,外部要通過屬性的設置來對字段的數值進行訪問,修改和計算。一般的字段都是private來修飾的。
static的講解:來設置全局的屬性方法等。static修飾的構造函數只能執行一次,一般是給靜態字段(全局變量)賦值
對類成員(字段,屬性,方法)的訪問:類內部訪問自身
this.成員名或者直接成員名
;類外部訪問其他類的成員對象.成員名
(必須先實例化為對象才可以進行訪問);static的比較特殊,不能實例化,直接類名.成員名
。抽象類出現的意義:c#是單一繼承模式,能不給的盡量不給,抽象類的存在就是為了解決這個問題,抽象類里只放入基類想要派生的東西,然后繼承給子類,很好的保護了基類成員的私有性。
接口是:c#語言的多態性,又一個基類可以派生好多實現不同功能的類,這些功能可以近似的稱之為接口吧。
-
Mac編寫c#程序我的配置是:mono環境下,VScode編寫,需要手動進行編譯,然后運行。
編譯:mcs hello.cs
運行:mono hello.exe
然后才會輸出Hello Mono World
.完成了!!!//WTF!!!C#最大的特色是不允許直接操作內存,去掉了指針操作。 // 建立一個student的公有類,里面有字段stuNumber和stuName,公有屬性StuNumber,構造函數Student傳入這兩個參數 using System; public class Student{ //類名首字母看情況大寫,不大寫也不會報錯。 public static string school; //盡量不要定義全局變量,不是必須的話,會浪費資源,通常情況下作為工具類需要定義全部變量 private string stuNumber; //定義字段一般使用private,之后通過屬性,方法等訪問內容,保持私有性,比較安全的做法 private string stuName; //stuName這個字段是多余的,因為在Main函數中并沒有被用到,然而c#又是通過各種類進行對數據的操作,stuName是私有的,別的類,尤其是Main并沒有辦法訪問,所以他的存在只是在浪費資源, public string StuNumber{ //最好大寫首字母,完成對私有類屬性的訪問修改 get { return stuNumber; } //只讀屬性 set { stuNumber = value; } //只寫屬性 } public Student(string num, string name ){ //構造函數不能有返回值類型,甚至連void都不能有,并且構造函數名必須和類名保持完全一致 //參數有幾種:1.值類型(沒有多余修飾符)2.引用類型(ref修飾)3.輸出類型(out修飾)4.數組類型 stuName = name; // this帶不帶均可。 this.stuNumber = num; } static Student(){ //另一種構造函數模式:靜態構造函數,在整個程序中只能執行一次,一般是給靜態字段(全局變量)賦值。) school = "tjut";//不能加上this,因為static是一個全局變量,不屬于某一個類,沒有static的是實例方法,有static的是靜態方法。加上static的成員被類的所有的實例對象共享,便于對象之間的互相通信 } } //同一個類中的其他方法調用:『方法名』類外部的其他方法調用:『對象名.方法名』 //static聲明的靜態方,直接『類名.方法名』,不需要實例對象就可以使用 class Program{ static void Main(string[] args){ //Main函數是可執行程序的唯一入口點,程序在Main中開始,也在Main中結束, Student newStu = new Student("2014","msk"); Console.WriteLine(Student.school); Console.WriteLine(newStu.StuNumber); } }