1. 程式人生 > >類繼承接口、使用接口實例化 與 使用類實例化

類繼承接口、使用接口實例化 與 使用類實例化

允許 strong vmw comment cat 地址 order 類繼承 www.

一、
接口不能實例化,用接口的實現類可以實例化,將實現類的對象在內存中的地址指向接口,這個接口就可以使用了
二、
實現接口的類 實例 = new 實現接口的類()// 這樣用不好嗎?

//這樣已經不是好不好的問題了,這樣的話,要接口有什麽用?
//用接口就是讓實例和實現類的耦合度降低。
//讓程序更加容擴展。

以下是問題之外的知識,想看可以往下,不想看跳過。

接口 實例 = new 實現接口的類A() 
接口 實例 = new 實現接口的類B() 
接口 實例 = new 實現接口的類C() 
這樣的邏輯就是說,我們需要某個類,所以我們每次實例化它。

如果把 ABC這三個類,再用一個類封D裝起來,會怎麽樣呢?

接口 實例 = D.A
接口 實例 = D.B
接口 實例 = D.C

我們還是需要某個類,但是,我們不需要每次都實例化了,只需要找D“拿”就行。

嗯,這就是工廠模式的來由!!!!

C# 實例化接口對象的方法

在head first 設計模式中 用到了很多很多接口對象

首先澄清一個問題,就是接口不僅可以聲明對象,而且可以把對象實例化,還可以當做參數被傳入。

一、接口回調

這就是繼承中的向上轉型。父類 FL=new 子類();只不過這裏的父類就是interface接口。(個人認為這裏不管是class的override還是interface的重寫,都是一樣的用法)

可以把實現某一接口類創建的對象的引用賦給該接口聲明的接口變量,那麽該 接口變量就可以調用被類實現的接口中的方法。實際上,當接口變量調用被類實現的接口中的方法時,就是通知相應的對象調用接口方法

直接上代碼

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { interface Itemp { double plus(); } public class num : Itemp
{ double aa, bb; public num(double a, double b) { this.bb = b; this.aa = a; } public double plus() { return (aa * bb); } } class Program { static void Main(string[] args) { num n = null;//聲明類對象引用 Itemp tm = null;//聲明接口對象引用 tm = new num(1.1, 2.2);//接口回調(向上轉型) Console.WriteLine(tm.plus()); Console.ReadKey(); } } }

通過上面的例子,我們不難看出,接口對象的實例化實際上是一個接口對象作為一個引用,指向實現了它方法的那個類中的所有方法,這一點非常象C++中的函數指針(在C#中類似委托),但是卻是有區別的。C#中的接口對象實例化實際上是一對多的,而C++中的函數指針是一對一的。

但是需要註意的是,接口對象的實例化必須用實現它的類來實例化,而不能用接口本身實例化。用接口本身實例化它自己的對象在C#中是不允許的。





類繼承接口、使用接口實例化 與 使用類實例化