內容主要包括兩大主題:接口和委託
一.接口
3.接口沒有字段,運算符重載,實例構造函數,析構函數,只有方法( 屬性 事件 索引器)
interface MyInterface{
//只能被重寫 不能被調用 類似抽象方法 不需寫訪問權限 默認爲公有
void print();
}
interface Interface
{
void print();
}
{
public void print()
{
Console.WriteLine ("MyClass");
}
{
// 不加訪問權限 默認爲私有
//當多個接口有共同的方法時
//不分開隱式實現(推薦)(2個接口方法 同時實現)
{
Console.WriteLine ("MyClass");
}
void MyInterface.print()
{
Console.WriteLine ("MyInterface");
}
void Interface.print()
{
Console.WriteLine ("Interface");
}
使用顯式接口實現方式時,需要注意幾個問題
1.若顯式實現接口,方法不能使用任何訪問修飾符。
顯式實現的成員默認爲私有。
2.顯式實現的成員默認是私有的,所以這些成員不能通過對象
直接訪問。此時正確的訪問方式就是把對象顯式的轉換爲對應的接口,通過接口來調用該方法。
MyClass mc = new MyClass();
MyInterface mc1 = (MyInterface)mc;
mc1.print ();
3.當類實現單個接口時,通常使用隱式接口方式,因爲對象可以直接訪問接口方法。
4.實現多個接口時候,一般推薦使用顯式的方式。
簡單分析一下區別:
1.抽象類使用abstract關鍵字進行定義,接口使用interface進
行定義,它們都不能實例化
2.抽象類可以包含虛方法、非抽象方法和靜態成員;但接口不
能包含虛方法和任何靜態成員,並且接口中只能定義方法,不能有具
體實現。
3.抽象類不能實現多繼承,接口支持多繼承。
4:抽象類本質是一個類;接口只是代表實現類具有接口聲明的方法,是一種CAN—DO關係。
二.委託
class MainClass {
//1:
聲明委託
delegate void
MyDelegate(int
para1,int
para2);
public static void Main (string[] args)
{
//2: 定義委託變量
MyDelegate d;
//3: 實例化委託(添加方法)
d = new MyDelegate (new MainClass().Add);
//4: 調用
MyMethod (d);
Console.WriteLine ("Hello World!");
}
void Add(int a,int b)
{
int sum = a + b;
Console.WriteLine (""+sum);
}
private static void MyMethod(MyDelegate myDelegate)
{
//5: 方法中調用委託
myDelegate (1,2);
}
}
委託的優點:
引入委託之後,我們可以把函數作爲參數傳遞給另外一個方法了。委託可以提高方法擴展性。
2.委託鏈
{
public delegate void delegateTest();
private static void method1(){
Console.WriteLine ("這是靜態方法1");
}
private void method2(){
Console.WriteLine ("這是實例方法2");
}
private void method3(){
Console.WriteLine ("這是實例方法3");
}
static void Main(string[] args){
MainClass p=new MainClass();
delegateTest d1 = new delegateTest (MainClass.method1);
// delegateTest d1 = MainClass.method1;//簡寫
delegateTest d2 = new delegateTest (p.method2);
delegateTest d3 = p.method3;//簡寫
delegateTest delechain = null;
delechain += d1;
delechain += d2;
delechain += d3;
//移除委託
delechain -= d1;
delechain ();
delechain = d3;//只輸出爲d3的方法
delechain ();
}