C# 實(shí)例化接口對(duì)象的方法
在head first 設(shè)計(jì)模式中 用到了很多很多接口對(duì)象
首先澄清一個(gè)問題,就是接口不僅可以聲明對(duì)象,而且可以把對(duì)象實(shí)例化,還可以當(dāng)做參數(shù)被傳入。
一、接口回調(diào)
這就是繼承中的向上轉(zhuǎn)型。父類 FL=new 子類();只不過這里的父類就是interface接口。(個(gè)人認(rèn)為這里不管是class的override還是interface的重寫,都是一樣的用法)
可以把實(shí)現(xiàn)某一接口類創(chuàng)建的對(duì)象的引用賦給該接口聲明的接口變量,那么該 接口變量就可以調(diào)用被類實(shí)現(xiàn)的接口中的方法。實(shí)際上,當(dāng)接口變量調(diào)用被類實(shí)現(xiàn)的接口中的方法時(shí),就是通知相應(yīng)的對(duì)象調(diào)用接口方法
直接上代碼
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;//聲明類對(duì)象引用
Itemp tm = null;//聲明接口對(duì)象引用
tm = new num(1.1, 2.2);//接口回調(diào)(向上轉(zhuǎn)型)
Console.WriteLine(tm.plus());
Console.ReadKey();
}
}
}
通過上面的例子,我們不難看出,接口對(duì)象的實(shí)例化實(shí)際上是一個(gè)接口對(duì)象作為一個(gè)引用,指向?qū)崿F(xiàn)了它方法的那個(gè)類中的所有方法,這一點(diǎn)非常象C++中的函數(shù)指針(在C#中類似委托),但是卻是有區(qū)別的。C#中的接口對(duì)象實(shí)例化實(shí)際上是一對(duì)多的,而C++中的函數(shù)指針是一對(duì)一的。
但是需要注意的是,接口對(duì)象的實(shí)例化必須用實(shí)現(xiàn)它的類來實(shí)例化,而不能用接口本身實(shí)例化。用接口本身實(shí)例化它自己的對(duì)象在C#中是不允許的。
以上這篇C# 實(shí)例化接口對(duì)象的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
比Math類庫abs()方法性能更高的取絕對(duì)值方法介紹
這篇文章主要給大家介紹了一種比Math類庫abs()方法性能更高的取絕對(duì)值方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
C#中的Task.WaitAll和Task.WaitAny方法介紹
這篇文章介紹了C#中的Task.WaitAll和Task.WaitAny方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
c#擴(kuò)展datatable轉(zhuǎn)json示例
這篇文章主要介紹了c#擴(kuò)展datatable轉(zhuǎn)json示例,需要的朋友可以參考下2014-05-05

