標籤:isp 能力 列表 return 抽象方法 protected stat 注意 abstract
好吧,本來想用git的,可能門檻太高,沒弄明白怎麼用。那我就簡單挑需要注意的重點寫下吧。
重載:方法名必須相同、參數列表必須不同,傳回值類型可以相同也可以不同。
重寫:方法名、參數列表和傳回值都必須相同。
建構函式:和類名相同,如果不寫,編譯器會自動產生一個無參的建構函式。
作用:對象的初始化,不能顯示調用,只能在建立時用new來調用。
靜態建構函式:第一次執行個體化該類的時候調用,之後不再初始化。
注意非靜態建構函式如果有繼承關係,子類建構函式調用的時候會先初始化父類。
如果有兩個類
public class Base
{
a:static int number = 1;
b:int number2 = 2;
c:static Base()
d{
}
e:public Base()
f:{
}
}
public class Child : Base
{
g:static int number = 1;
h:int number2 = 2;
i:static Child()
j:{
}
k:public Child()
l:{
}
}
執行個體化Child的時候,初始化順序
g i j h k a c d b e f i
裡氏替換:子類可以替換父類位置,父類不能替換子類。
子類可重寫父類方法:
如果沒有重寫,聲明的是哪個類就調用哪個類型的方法。如果有重寫,無論聲明的是哪個類都調用子類方法。
class father
{
public virtual void dosth()
{
Console.WriteLine("father do");
}
public void dosth1()
{
Console.WriteLine("father do1");
}
}
class sun:father
{
public override void dosth()
{
//base.dosth();
Console.WriteLine("sun do");
}
public new void dosth1()
{
Console.WriteLine("sun do1");
}
}
//重寫
father f = new sun();
f.dosth();
//sun do
//無重寫
father f = new sun();
f.dosth1();
//father do1
抽象類別不能密封。不能用static修飾。
抽象類別中可以包括抽象成員也可以有非抽象成員。
抽象成員必須在抽象類別中。
抽象方法不能有任何方法實現。
如果抽象類別實現介面則可以把介面中的方法映射到抽象類別中作為抽象方法讓子類去實現,也看在抽象類別中直接實現該方法。
類不能new的情況,static,建構函式私人化,抽象類別
抽象類別實現了把可變與不可變分離
介面是一種特殊的抽象類別。定義規則,降低耦合。
沒有一定關係,側重單一的某種能力。多繼承,沒有具體實現,只有方法聲明。
可以有方法、屬性、索引器、事件。不能有欄位、常量、域、建構函式、解構函式、靜態成員。
介面不具備繼承的任何特點,它僅僅聲明能夠調用的方法。
介面裡沒有建構函式,抽象類別裡有建構函式,雖然不能執行個體化。
抽象類別:
abstract class MobileStorage
{
public abstract void Read();
public abstract void Write();
}
class MobileDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("移動硬碟正在讀取");
}
public override void Write()
{
Console.WriteLine("移動硬碟正在寫入");
}
}
class UDisk : MobileStorage
{
public override void Read()
{
Console.WriteLine("隨身碟正在讀取");
}
public override void Write()
{
Console.WriteLine("隨身碟正在寫入");
}
}
class Computer1
{
MobileStorage ms;
public MobileStorage Ms
{
get { return ms; }
set { ms = value; }
}
public void CpuRead()
{
ms.Read();
}
public void CpuWrite()
{
ms.Write();
}
}
MobileStorage ms = new UDisk();
Computer1 computer = new Computer1();
computer.Ms = ms;
computer.CpuRead();
computer.CpuWrite();
介面:
interface IFlyable
{
void Fly();
}
interface ISpeak
{
void Speak();
}
class Bird
{
public double Wings
{ get; set; }
public void EatAndDrink()
{
Console.WriteLine("Bird類會吃喝方法");
}
}
class Bird1 : IFlyable
{
public void Fly()
{
Console.WriteLine("鳥飛的方法");
}
void IFlyable.Fly()
{
Console.WriteLine("介面的飛方法");
}
}
class MaQue : Bird, IFlyable
{
public void Fly()
{
Console.WriteLine("麻雀會飛");
}
}
IFlyable obj = new MaQue();
obj.Fly();
Bird bird = (Bird)obj;
bird.EatAndDrink();
//MaQue類型本身具備bird的方法和飛的方法。如果聲明的什麼類型,就只能訪問到什麼類型的方法。
new MaQue().EatAndDrink();
new MaQue().Fly();
Bird1 bd1 = new Bird1();
bd1.Fly(); //鳥飛的方法
IFlyable ifly = new Bird1(); //如果介面的方法顯示聲明了,就會執行介面的方法。
ifly.Fly(); //介面飛的方法
抽象類別和介面:
interface interfaceRun
{
void Run();
}
abstract class abserson : interfaceRun
{
static string name;
public static void Hello()
{
Console.WriteLine("hello");
}
public void how()
{
Console.WriteLine("how");
}
protected abstract void smile();
public abstract void Run();
}
class xiaohai : abserson
{
public override void Run()
{
Console.WriteLine("xiaohai run");
}
protected override void smile()
{
Console.WriteLine("xiaohai smile");
}
public new void how()
{
Console.WriteLine("xiaohai how");
}
}
xiaohai xh = new xiaohai();
xh.Run();
xh.how();
abserson.Hello();//調用抽象類別中非抽象成員
好了,知識點差不多就這麼些,簡單運用做下練習。
一個是火車購票:用了抽象、簡單工廠、反射。
一個是簡單的小遊戲:後台儲存資料用了EF。
http://files.cnblogs.com/files/buzhidaojiaoshenme/%E7%81%AB%E8%BD%A6%E8%B4%AD%E7%A5%A8.rar
http://files.cnblogs.com/files/buzhidaojiaoshenme/%E5%B0%8F%E6%B8%B8%E6%88%8F.rar
C#相關知識小結