2012-06-22 151 views
3

我正在開發一個實現內部接口的內部類。 任何人都可以解釋爲什麼我不能聲明我的方法爲內部,爲什麼我得到以下錯誤:「不能實現一個接口成員,因爲它不公開」。爲什麼必須公開實現內部接口的方法

我知道我必須聲明方法是公開的,但它對我來說絕對沒有意義。

如果接口和類都是內部的,則聲明方法是公共的,這有什麼意義? 這是不是誤導?

我已閱讀a related question on this site。這不是完全重複的,因爲我的課是內部的。

+1

接口爲什麼要在內部或不影響接口的本質? – BoltClock

+0

@BoltClock我不想公開任何東西。內部是一個更好的選擇。 –

回答

9

簡而言之:因爲這是語言設計者設計它的方式。即使在內部接口中,這些方法也是隱式公開的。它確實使事情變得簡單,但在其他方面也是一種痛苦。

如果你想要一個公共類,你想要「隱藏」一個內部接口的使用,你可以使用顯式接口實現 - 儘管這有其他缺點。

當然,如果你的類是內部的,那麼無論如何這些方法是公共的並不重要 - 其他程序集將無法調用這些方法,因爲它們看不到類型。

我絕對同意C#(或者一般的.NET)並沒有經過精心設計,因爲它可能圍繞着內部接口。

正好爲什麼你會得到一個錯誤消息 - C#4規範(接口映射)的13.4.4節是原因。實現僅適用於非靜態公共成員和顯式接口成員實現 - 如果接口中有未實現的成員,則會發生錯誤。

+0

喬恩,你能解釋一下你的意思:「它確實使事情變得簡單,但在其他方面卻是一種痛苦」。 –

+2

@ArneLund:顯式接口實現有時會給出令人驚訝的結果,並且使得在派生類中首次調用基類中的現有接口的接口的* new *實現變得困難/不可能。它也失敗了動態打字。 –

+0

非常感謝!我在想,爲什麼這種看似一致的行爲被認爲是非法的。你已經解釋過C#沒有經過精心設計,因爲它可能是。我感覺合理。週末愉快! –

相關問題