2010-02-15 69 views
8

我有一個類,我標記爲內部和我標記字段和方法爲公共。它編譯時沒有錯誤或警告。是否有特定的需要將方法作爲public和class作爲內部使用(除非它們是從接口或類實現的)?爲什麼C#允許方法/成員公開時,類是內部的

+0

也許沒有副作用,所以檢查這將是多餘的。 – 2010-02-15 08:48:28

+0

雅我同意沒有副作用,但我的問題本身是否有任何具體的用例,這變得有用。 – Ravisha 2010-02-15 08:50:45

回答

8

它沒有不利影響,也意味着如果您決定將該類型設爲公開,則不需要更改您的成員的可訪問性。

基本上是一個成員:

  • 公共指會員可見,任何人誰可以看到類型。

  • 內部表示該成員僅在當前程序集中可見,即使該類型是公開可見的。

因此,您的選擇將基於哪些是最合適的。一般而言,最爲合適的方法是公開成員(即任何可以看到Type的人都可以看到,即Type的公共API的一部分)。您可以將內部成員設爲內部,這是因爲您在公共類中使內部成員具有相同的原因 - 通常是隻應在同一程序集中的「朋友」類中可見的幫助成員,並且不構成公共API的一部分。

此外,內部類型可以從公共類型派生,因此可以繼承並覆蓋公共成員。允許被覆蓋的公衆成員,而不是新的公共成員是否有意義?

+0

好的解釋喬,有沒有其他用途(除從「你決定公開類型,你不需要改變你的成員的可訪問性」)。 – Ravisha 2010-02-15 09:22:27

+0

「有沒有其他用途」 - 沒有區別。所以我通常會讓成員公開,除非有明確的理由讓它們成爲內部的,即除非它們是公共類型的內部成員(通常幫助成員不應該在公共API中可見,但可以被「朋友」類訪問在同一個程序集中。 – Joe 2010-02-15 09:41:13

5

使用公共方法標記爲internal的類將允許同一組件中的其他類引用這些方法。

internal (C# Reference)

一個常見用途的內部連接在 基於組件的開發,因爲它 能夠 的一組部件在私人方式而不 合作暴露於 應用程序的其餘碼。例如,用於構建圖形用戶界面的 框架可以提供Control和 表單類,這些表單類可以使用 成員進行內部訪問。由於 這些成員是內部的,因此它們是 未公開給使用 框架的代碼。

引用類型或 成員具有內部訪問 已定義的程序集是錯誤的。

編輯

Scope of internal method in C#?

您可能希望在公共 類可以通過其他 班大會被稱爲一個方法,但不是的 客戶部件。

+0

同意。 如果我將該方法標記爲內部函數,我可以在程序集內引用它。 – Ravisha 2010-02-15 08:43:53

1

沒有任何警告,因爲它沒有任何不良影響。無論如何,這些成員無法從其他程序集訪問,無論您將其標記爲公開還是內部。

0

請考慮這種情況:

您有一個FooFactory創建實現IFoo的對象。您的IFoo實現可能是內部的,因爲您不想將它們暴露給僅使用IFoo的其他程序集。 IFoo實施的成員必須是公開的,因此可以在其他程序集中使用它們。

所以,現在我已經閱讀了你所有的問題,我認爲沒有任何理由讓內部類的方法公開,除非有一種方法可以通過接口從其他程序集中訪問這些類。基類。

+0

親愛的andrew.I在接口和基類之外提到了這個問題。 – Ravisha 2010-02-15 08:46:52

+0

嘿......這就是我試圖回答問題,而一個小小的孩子試圖竊取我的鼠標... – 2010-02-15 08:53:24

+0

可能是它的時間,你停止玩老鼠:) – Ravisha 2010-02-15 09:06:45

相關問題