2011-07-06 63 views
1

幾年前,我有一個關於OO的語言課程。 我忘記了這個聲明,並希望能夠幫助它恢復到內存。OO關於代理vs繼承與接口的基本問題

它是下列之一:

  1. 一切你可以與一個界面做的也可以委託做
  2. 你可以用一個接口所做的一切,也可以繼承做
  3. 您可以使用繼承進行的所有工作也可以通過接口完成
  4. 您可以使用繼承完成的所有工作也可以使用代理完成

我知道它的其中一個,而且1必然是完全無效的

請問您可以對此有所瞭解嗎?

+0

最有可能的是他們提到了「贊成組合比繼承」。在你的情況下,這將是聲明4.另一方面,接口傾向於很好地解決'多繼承'問題,並且是在測試用例中提供測試假人的強大工具。 –

+1

很可能這是作業... –

回答

2

我同意IAbstract - 委託與繼承或接口無關,所以我不認爲任何聲明都適用。

在我看來#2是正確的答案。一個接口提供了一組實現類必須包含的方法,屬性和事件。你可以通過繼承來得到這個默認值:所有超類的非私有屬性,方法和事件都可用於子類。

繼承爲子類提供實現細節(方法體),而接口不提供;它只提供給定課程中可用的內容。這就是爲什麼我不認爲#3是正確的。

+0

好的,我遵循 - 有道理。這就是爲什麼我不喜歡用這種方式寫的測試問題。 – IAbstract

1

首先,代表真的沒有什麼關係的繼承或接口 - 所以我會排除這兩個1和4

其次,考慮的interface是下列之一:

abstract class SomeInterface { 
/*.. do stuff ..*/ 
} 

...或

interface ISomeInterface { 
/*.. do stuff ..*/ 
} 

爲了有用,這些必須由一個具體的類繼承的地方向下的層次結構。通常,當派生一個類型時,你將有一個可以從中派生的接口的選擇。雖然我從來沒有聽過這種說法,但我會選擇#3 - 如果在多項選擇題上給出的話。

+0

我假設他們提到'接口委託',而不是'.net'中使用的委託。 http://en.wikipedia.org/wiki/Delegation_pattern –

0

您已將問題標記爲C#,我可以回覆。但是,如何實現接口的代表,繼承和接口方式可能會有所不同,所以我不確定關於面向對象的抽象語句是多麼有用。

「一個可以通過委託來解決的問題也可以通過一個接口來解決。」 〜C#4.0簡而言之

MSDN programming guide interface vs delegate

當然,您可以通過接口做繼承一切你可以,但它可能會導致大量的冗餘代碼。因此,當C#缺少真正需要時,沒有多重繼承的好替代品。

任何可以用匯編語言編寫的高級語言都可以做到,但如果您關心的是生產力,那麼這可能沒有實際用處。