[Object-oriented] : 介面
前言 :
介面
是在物件導向裡,是個不難懂,卻是很重要的東西。
筆者試著採用指標的方式,來解釋介面的運作。
介面 :
底下是一段介面的程式碼
這個程式碼很簡單,就是ClassA實作ISampleX而已
public interface ISampleX
{
void XXX();
void YYY();
}
public class ClassA : ISampleX
{
public void XXX()
{
// ...
}
public void YYY()
{
// ...
}
public void ZZZ()
{
// ...
}
}
當我們在程式內撰寫如下的程式
函式AAA與函式BBB內部同樣是呼叫item.XXX();
執行的結果也都相同都是執行ClassA.XXX()
但是在執行順序上卻是不同的
class Program
{
static void Main(string[] args)
{
AAA(new ClassA());
BBB(new ClassA());
}
public static void AAA(ClassA item)
{
item.XXX();
}
public static void BBB(ISampleX item)
{
item.XXX();
}
}
函式AAA是參考ClassA
可以這樣理解
public static void AAA(ClassA item)
{
item.XXX();
}
函式BBB是參考ISampleX
可以這樣理解
public static void BBB(ISampleX item)
{
item.XXX();
}
可以看的出來當我們參考介面的時候
會在類別的外面多加一層
程式碼依照這層介面的定義,來呼叫實際的物件程式碼
參考 :
我們再來看下面的程式碼
public interface ISampleX
{
void XXX();
void YYY();
}
public class ClassA : ISampleX
{
public void XXX()
{
// ...
}
public void YYY()
{
// ...
}
public void ZZZ()
{
// ...
}
}
public class ClassB : ISampleX
{
public void XXX()
{
// ...
}
public void YYY()
{
// ...
}
public void AAA()
{
// ...
}
}
當我們在程式內撰寫如下的程式
函式BBB是參考ISampleX,但傳入的物件卻分別為ClassA及ClassB。
依照前面的說明,我們可以理解
ClassA及ClassB在傳入函式後,會加上一層名為ISampleX的外皮。
所以函式BBB還是可以正常的執行。
class Program
{
static void Main(string[] args)
{
BBB(new ClassA());
BBB(new ClassB());
}
public static void BBB(ISampleX item)
{
item.XXX();
}
}
後記 :
本篇的文章,
描述了介面的運作,希望對大家有幫助^^
P.S.
本篇的內容大幅度的簡化了計算機結構的內容,用以傳達物件導向的概念。
實際電腦系統在運作的時候,比本篇說明的複雜很多 ^^"。
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。