對象?
西方思想是:復雜的事讓秘書去做就行。老板只需簡單的下達命令。
代碼格式如下
? ? ? ? 秘書類型? ? ? ? 秘書A? =? ?new? ? 秘書類型();
.
? ? ? ? 秘書A.開始工作();? ? ? ? ? ? ? ? //? 調用實例對象的方法。
特別注意的是,程序只會用到? 秘書A,秘書B,秘書C,。。。。不會用到秘書類型。
秘書類型只相當于圖紙,程序只會用到圖紙生產出來的實例對象【秘書A就是實例對象】,而且C#不需要關心銷毀對象。
對象設計
電腦是不知道對象的,所以你需要描述告訴電腦什么是對象。? ? ?//? ?描述出對象類型。
????????一個class對象包含 {字段,屬性,方法}。
東西要先擁有后,才能使用。就像你買了PLC,你不編程,按機器按鈕是不會啟動機器的。
最簡寫的對象是:字段?+ 方法。
字段:對象能用數字表示的東西,如年齡,身高等。
方法:就是不能用值類型表示,唱歌,跳舞等。行為用方法表示。
.
? ? ? ? class? ? ? ? 秘書類型
? ? ? ? {
? ? ? ? ? public? ? ?int? ? ? ?年齡 = 18;? ? ? ? ? ? ? ? ? ? ? ? //? 字段
? ? ? ? ? public? ? ? void? ? ? ? 開始工作()? ? ? ? ? ? ? ? ? ? ?//? 方法
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟2;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟N;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
????????}
字段
????????????????秘書A.年齡? = -18 ;
字段使用時會有問題,比如年齡給負數,-18歲。語法上是正確的,但不符合實際情況。
所以衍生出了屬性。用于限制輸入值的范圍,如0~140;
public? ? int? 年齡{? get;? set { if(value>0 && value<100)}? ?//編譯器自動生成一個內部的年齡,只是我們看不到而且。不推薦這種寫法。
.
我們應該顯示的定義一個私有字段【_年齡】,然后定義一個屬性【年齡】,把屬性的值,給私有字段。這樣才能保證年齡值不出錯。
.
? ? ? ? class? ? ? ? 秘書類型
? ? ?{
? ? ? private? ? ?int? ? ? ?年齡 = 18;? ? ? ? ? ? ? ? ? ? ? ? //? 變量
? ? ?// 這里屬性到變量,起到數據隔離的作用,保證數據不出錯。
? ? ? public? ? ? int? ? ?年齡屬性{get? return? 年齡;set{if(value>0&&value<140)年齡=value;}
? ? ? public? ? ? void? ? ? ? 開始工作()? ? ? ? ? ? ? ? ? ? ?//? ?行為
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟1;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟2;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 步驟N;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
????????}
// 變量名和屬性名不能重名,可以這樣寫【_年齡,年齡】
屬性是用來跟外界交互的,不用public就沒意義了。雖然字段也可以,但字段不安全。
一個class對象包含 {字段,屬性,方法}。
到這里? ? ? ??
秘書類型? ? ? ? 秘書A? =? ?new? ? 秘書類型();
.
? ? ? ? 秘書A.年齡屬性? = -18 ;? ? ? ? ? ? ? ? //? 這里是輸不進去的。數據防呆
常用屬性寫法有
public int MyProperty { get; set; }? ? ? ? //編譯器默認會生產一個私有MyProperty的字段變量
.
private int myVar;
public int MyProperty { get { return myVar; } set { myVar = value; } }? ? ? ? //推薦用這種
.
public int MyProperty { get; private set; }
.
public int MyProperty { get; set; } = 50;????????//帶默認值
.
public int num;
public int MyProperty { get=>num; set=>num=value; }? ? ? ? // 萊姆達寫法
=================================
以上的屬性,可以看作是一個方法。可以對值做邏輯判斷,然后報警寫入日志等。
屬性和字段是配合使用的。屬性的本質是方法,用來保護字段的值【數據隔離】?
字段:主要是內部使用,所以一般都是private修飾的變量。注意:公有字段不能被控件識別
屬性:主要是外部使用,所以必須是public修飾。作用:1業務擴展2控制字段讀寫
方法
函數,方法,行為,功能,是同一個意思。只是稱呼不同而已。【番茄,西紅柿】
方法就是對象的行為描述。對象有哪些功能。這些行為都需要自己去編寫【對象的功能】
方法有以下幾種:
? ? ? ? ? ? ? ? ? ? ? ? ? ?無參無返回? ? ? ? void????????開始工作();
? ? ? ? ? ? ? ? ? ? ? ? ? ?有參無返回? ? ? ? void? ? ? ??開始工作(int? 參數A);
? ? ? ? ? ? ? ? ? ? ? ? ? ?無參有返回? ? ? ? int? ? ? ? ? ?開始工作();
? ? ? ? ? ? ? ? ? ? ? ? ? ?有參有返回? ? ? ? int? ? ? ? ? ?開始工作(int? 參數A,int? 參數B);
秘書類型? ? ? ? 秘書A? =? ?new? ? 秘書類型();? ? ? ?//這里也是方法調用,調用無參構造方法
秘書類型? ? ? ? 秘書A? =? ?new? ? 秘書類型(身高1米8);? ? ? ?//調用有參構造方法
.
? ? 秘書A.開始工作();? ? ? ? ? ? ? ? //? 無參
? ? 秘書A.開始工作(工作8小時);? ? ? ? ? ? ? ? //? 有參
? ? 秘書A.開始工作(工作8小時,加班4小時);? ??//? 有參,不要超過4個,否則參數用對象傳
? ?int? 工作結果? =??秘書A.開始工作();? ? ? ? ? ? ? ?//??
方法種類:
? ? ? ? ? ? ? ? 實例方法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // new后的實例,再調用方法。
? ? ? ? ? ? ? ? 靜態方法(抽象方法,虛方法)? ? ? ?//要用類型去調用
? ? ? ? ? ? ? ? 構造方法(對象初始化器)
構造方法
秘書類型()? ??? ? ? ?//編譯器默認提供一個無參構造方法
????????秘書類型(int A,int B)
? ? ? ? 秘書類型(int A,int B,int C)
? ? ? ? :this(A,B)? ? ? ? //調用構造重載? ? ? ? :base 是調用父類重載
? ? ? ? {
? ? ? ? ? ? ? ? this.表示實例對象的
? ? ? ? ? ? ? ? base.表示父類的
? ? ? ? }
對象初始化器
? ? ? ? ? ? ? ? ? ? ? ? //用來初始化實例對象
秘書類型? ? ? ? 秘書A? =? ?new? ? 秘書類型()? ? ? ? ? ? ? //屬性之間用逗號隔開,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??最后一個屬性不需要逗號
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?年齡屬性 = 18
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?}