標籤:使用 io 檔案 問題 cti ar 代碼 line
物件導向不是取代面向過程的
類、對象。"人"是類,"張三"是人這個類的對象。
類是抽象的,對象是具體的。按鈕就是類,某個按鈕就是對象。對象可以叫做類的執行個體。類就像int,對象就像10.欄位field(和某個對象相關的變數),欄位就是類的狀態。人這個 類有姓名、年齡、身高等欄位。類不佔記憶體,對象才占記憶體。
方法:方法就是累能夠執行的動作,比如問好、吃飯等。
類的繼承,類之間可以有繼承關係,比如電腦類可以從"
電器"類繼承,這樣的好處是"電腦"類只需要定義自己特有的欄位、方法就可以,也就是只要定義了記憶體大小,cpu型號這些欄位或者彈出光碟機等方法 就可以。父類。基類。電腦類是電器類的子類。重用。
物件導向的三個特徵:封裝、繼承、多態。
沒有現象對象的世界中的難題。
成員存取層級
欄位、方法、屬性都可以叫做類的成員,他們都需要定義存取層級。存取層級的用處在於控製成員在哪些地方可以被訪問,這樣達到物件導向中"封裝"的目的
幾個存取層級:public(任何地方都可以訪問);privae(預設層級。只能由本類中的成員訪問)。還有internal/protected兩個層級,以後會講。
class Person{
private string Name;
public void GiveName(string name){
Name=name;//拒絕不好聽的名字
}
public void SayHello(){
Console.WriteLine("你好,我是{0}",Name);
}
}
Person tom=new Pewson();
tom.GiveName("tom");
//tom.Name="tom";
tom.SayHello();
永遠不要把欄位public
屬性
慣用法:屬性開頭字母大寫,欄位開頭字母小寫
class Person
{
private int age;
public int Age
{
get{return age;}
set{age=value;}
}
public void SayHello()
{
Console.WriteLine("我的年齡是{0}",Age);
}
}
只用set或者只用get就可以定義唯讀或者唯寫屬性(唯寫的不常見)
可以為set、get設定存取層級
例子,限制非法值的設定
欄位和屬性的區別是什嗎?屬性看似欄位、不是欄位,可以進行非法值控制,可以設定唯讀。
set/get塊內部其實就是get_***/set_***方法。
物件導向04
物件導向版聊天機器人
機器人呢有不同的名字、維護自己的FullLevel,可以SayHello(我叫***),可以餵食(Eat(int foodCount)),可以對它說話(Speak),對異常情況(錯誤的喂飯數字,喂得太多會撐死了)進行處理,有兩個機器人供選擇,一開始通過1、2數字選擇聊天機器人。
Reflector 反編譯器在vs的什麼地方,怎麼找不到呀?
物件導向編程基礎8 建構函式
建構函式用來建立對象,並且可以在建構函式中對對象進行初始化
建構函式式用來建立對象的特殊函數,函數名和類名一樣,沒有傳回值,連void都不用。
建構函式可以有參數,new對象的時候傳遞函數參數即可
建構函式可以重載,也就是有多個參數不同的建構函式。
如果不指定建構函式,則類有一個預設的無參建構函式。
如果指定了建構函式,則不在有預設的無參建構函式,如果需要無參建構函式,則需要自己來寫。
物件導向編程基礎10 繼承
public class Chinese Person
{
public string HuKou{get;set;}
public void KongFu(){......}
}
Chinese p1=new Chinese();
p1.Name="李雷";
p1.HuKou="北京朝陽區";
p1.SayHello();
p1.KongFu();
定義類的時候不指定父類,則父類是Object類,Object類是任何類
的直接或者間接父類。
異常與異常處理
傳統的錯誤表示方式:錯誤碼。舉例。需要知道不同錯誤碼的含義,如果不處理錯誤碼,則程式可能陷入不可以預知的錯誤。
錯誤碼的缺點::不處理則很難發現,每次處理則很麻煩;
難以看出錯誤的原因;容易使得程式進入不確定狀態。
try catch.Exception ex異常也是對象。
Exception 類主要屬性:Message/StackTrace
發生異常後程式預設就退出了,後續代碼不會執行。
catch以後的代碼則會繼續執行。
不要吃掉異常
扔出自己的異常
常量與靜態成員
Const常量。常量名要大寫。一定不會變的聲明成常量。
全域變數。static類變數。
不用new就能用的方法:static方法,static方法其實就是普通函數。
在static 方法中可以調用其他static方法、欄位、屬性。在非static方法中可以調用static的方法、欄位。
靜態類,不能被new的類就是靜態類。靜態類一般用來實現一些
函數庫。***Helper,SqlHelper,PageHelper
命名空間
namespace(命名空間),用於解決類重名問題,可以看做"類的檔案夾"
在代碼中使用其他類的時候需要using類所在的namespace.
System.Collections.ArrayList,快速引入的方法,右鍵--->解析
。
為什麼使用Convert/Console等類不需要自己寫using?
如果代碼和被使用的類在一個namespace則不需要using.
可以修改預設的namespace,因此不要認為在相同檔案夾下就不用using,不在相同檔案夾下就需要using.
索引器
C#中提供了按照索引器進行訪問的方法
定義索引器的方式:string this[int index]{get{return "";}
set {}},string為索引器的類型,[]中是參數列表。進行索引器寫操作就是調用set代碼塊,在set內部使用Value得到使用者佈建的值;進行讀操作就執行get代碼塊。
索引器參數可以不止一個,類型也不限於int,幾乎可以是任意類型