多態:表示不同的對象可以執行相同的動作,但是通過它們自己的實現代碼來執行。這裡需要將父類將該成員聲明為虛擬的,而且用到了方法重寫(override).
抽象類:用abstract聲明抽象類,注意抽象類不能實例化,抽象方法必須被子類重寫。
接口:是把隱式公共方法和屬性組合起來,以封裝特定的功能的一個集合,一旦類實現了接口,就可以支持接口所指定的所有屬性好成員。一個類可以支持多個接口,多個類也可以支持相同的接口。
集合:是優於數組,.NET Framework提供了用於數據存儲和檢索的專用類。集合隨著我們向裡邊添加元素而自動增加,自動調節大小。提供了對堆棧,隊列和哈希表的支持。
泛型:具有占位符(即參數類型)的類,結構,接口和方法。和集合緊密聯系,泛型集合可以獲得類型安全的直接優點。也就是說類型固定了。
下邊我們通過這個例子來理解上邊的概念:
定義類和接口的代碼:
[csharp]
<span style="font-size:18px;"> abstract class Animal//利用關鍵字abstract定義了一個抽象類
{
protected string name = "";
public Animal(string name)
{
this.name = name;
}
public Animal()
{
this.name = "無名";
}
protected int shoutNum = 6;//叫聲的次數
public int ShoutNum
{
get
{
return shoutNum;
}
set
{
shoutNum = value;
}
}
public string shout()//叫聲發出的代碼
{
string result = "";
for (int i = 0; i < shoutNum; i++)
result += getshoutsound() + ", ";//調用了getshoutsound的虛方法
return "我的名字叫"+ name + ""+result ;
}
protected virtual string getshoutsound()//修飾符virtual表示此方法為虛方法,可以被子類重寫
{
return "";
}
}
//定義不同的子類,來實現父類,其實就是多態的很好體現
class Cat:Animal //子類貓
{
public Cat():base()
{}
public Cat (string name):base (name)
{}
protected override string getshoutsound()
{
return"喵";
}
}
class Dog : Animal//子類狗
{
public Dog()
: base()
{ }
public Dog(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "喵";
}
}
class Cattle : Animal//子類牛
{
public Cattle()
: base()
{ }
public Cattle(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "哞";
}
}
class sheep:Animal//子類羊
{
public sheep ():base()
{}
public sheep(string name)
: base(name)
{ }
protected override string getshoutsound()
{
return "咩";
}
}
interface Ichange//定義了一個接口
{
string changething(string thing);
}
class Machinecat : Cat, Ichange//定義了個機器貓,繼承父類貓,並使用了接口Ichange
{
public Machinecat()
: base()
{ }
public Machinecat(string name)
: base(name)
{ }
public string changething(string thing)
{
return base.shout ()+ "我有萬能口袋,我可以變出:" + thing;
}
}</span>
下邊是客戶端的代碼:
[csharp]
<span style="font-size:18px;"> //private Animal[] arrayAnimal;//聲明一個動物數組
//集合的使用
IList<Animal> arrayAnimal;//聲明一個泛型集合變量,用接口Ilist,注意Ilist<Animal>表示此集合變量只能接受Animal類型
//貓叫的按鈕事件
private void button1_Click(object sender, EventArgs e)
{
Cat cat = new Cat("咪咪"); //類的實例化
cat.ShoutNum = 7;
MessageBox.Show(cat.shout());
}
//狗叫的按鈕事件
private void button2_Click(object sender, EventArgs e)
{
Dog dog = new Dog("旺財");//這裡只是簡單的調用方法,即可實現目的,體現了封裝的特性
dog.ShoutNum = 6;
MessageBox.Show(dog.shout());
}
//動物報名的按鈕
private void button3_Click(object sender, EventArgs e)//動物報名按鈕,
{
//arrayAnimal = new Animal[5];//實例化最多可以可報名5個的動物數組對象
arrayAnimal = new List<Animal> ();//實例化List對象
arrayAnimal.Add(new Cat ("小花"));//報名分別是貓和狗
arrayAnimal.Add( new Dog("阿毛"));
arrayAnimal.Add ( new Dog("小黑"));
arrayAnimal.Add(new Cat("嬌嬌"));
arrayAnimal.Add( new Cat("咪咪"));
MessageBox.Show(arrayAnimal.Count.ToString());//打印出我們添加的個數
arrayAnimal.RemoveAt(1);//這裡還可以刪除我們多添加的。
}
//讓報名的所有動物進行叫聲比賽
private void button4_Click(object sender, EventArgs e)
{
foreach (Animal item in arrayAnimal)//遍歷整個數組,讓他們一次實施shout的方法
{
MessageBox.Show(item.shout());
}
}
//叮當貓變出東西的事件代碼
private void button5_Click(object sender, EventArgs e)
{
Machinecat mcat = new Machinecat("叮當");//實例化機器貓
Machinecat mcat1 = new Machinecat("叮當2");
Ichange[] array = new Ichange[2];//聲明一個接口數組,將兩個實例賦值給數組
array[0] = mcat;
array [1]=mcat1;
MessageBox.Show(array[0].changething("各種各樣的東西!"));//利用多態性,實現不同的changething
MessageBox .Show (array[1].changething ("好多好多東西哈!"));
}</span>
這個學習也是非常基礎的,學習設計模式的基礎!