我有一個類,我標記爲內部和我標記字段和方法爲公共。它編譯時沒有錯誤或警告。是否有特定的需要將方法作爲public和class作爲內部使用(除非它們是從接口或類實現的)?爲什麼C#允許方法/成員公開時,類是內部的
回答
它沒有不利影響,也意味着如果您決定將該類型設爲公開,則不需要更改您的成員的可訪問性。
基本上是一個成員:
公共指會員可見,任何人誰可以看到類型。
內部表示該成員僅在當前程序集中可見,即使該類型是公開可見的。
因此,您的選擇將基於哪些是最合適的。一般而言,最爲合適的方法是公開成員(即任何可以看到Type的人都可以看到,即Type的公共API的一部分)。您可以將內部成員設爲內部,這是因爲您在公共類中使內部成員具有相同的原因 - 通常是隻應在同一程序集中的「朋友」類中可見的幫助成員,並且不構成公共API的一部分。
此外,內部類型可以從公共類型派生,因此可以繼承並覆蓋公共成員。允許被覆蓋的公衆成員,而不是新的公共成員是否有意義?
使用公共方法標記爲internal的類將允許同一組件中的其他類引用這些方法。
一個常見用途的內部連接在 基於組件的開發,因爲它 能夠 的一組部件在私人方式而不 合作暴露於 應用程序的其餘碼。例如,用於構建圖形用戶界面的 框架可以提供Control和 表單類,這些表單類可以使用 成員進行內部訪問。由於 這些成員是內部的,因此它們是 未公開給使用 框架的代碼。
引用類型或 成員具有內部訪問 已定義的程序集是錯誤的。
編輯
從Scope of internal method in C#?
您可能希望在公共 類可以通過其他 班大會被稱爲一個方法,但不是的 客戶部件。
同意。 如果我將該方法標記爲內部函數,我可以在程序集內引用它。 – Ravisha 2010-02-15 08:43:53
沒有任何警告,因爲它沒有任何不良影響。無論如何,這些成員無法從其他程序集訪問,無論您將其標記爲公開還是內部。
請考慮這種情況:
您有一個FooFactory創建實現IFoo的對象。您的IFoo實現可能是內部的,因爲您不想將它們暴露給僅使用IFoo的其他程序集。 IFoo實施的成員必須是公開的,因此可以在其他程序集中使用它們。
所以,現在我已經閱讀了你所有的問題,我認爲沒有任何理由讓內部類的方法公開,除非有一種方法可以通過接口從其他程序集中訪問這些類。基類。
- 1. 爲什麼模板允許未完成類的方法類型?
- 2. 爲什麼要宣佈成員公開而不是公開?
- 3. 爲什麼要在Java中公開私有的內部類成員?
- 4. 爲什麼C++不允許向類中添加新的方法?
- 5. 爲什麼在最終的java類中允許保護成員?
- 6. 爲什麼必須公開實現內部接口的方法
- 7. C++/CLI公開內部成員管理類只
- 8. 爲什麼是不允許爲[&A,&B]在PPL類的成員變量
- 9. 爲什麼在C++中允許將類對象指向成員變量,但不允許類對象本身?
- 10. 爲什麼java不允許創建內部類的實例?
- 11. 爲什麼在C#在這個成員的初始值是不允許的,但在VB.Net我被允許
- 12. 爲什麼在內部類中允許「static final」字段?
- 13. C++:允許訪問受保護的類的成員,而不是私人成員
- 14. 爲什麼我可以更新(公共)JavaScript方法的成員?
- 15. 爲什麼PHP不允許類具有同名的類和實例成員?
- 16. 爲什麼不允許接口作爲註釋成員?
- 17. 爲什麼部署TLS是許多客戶端開發人員
- 18. 內部方法類公約
- 19. 允許C++類訪問其他類的一些「內部」成員,但不是私有的?
- 20. 爲什麼一個類允許自己擁有一個靜態成員,但不是一個非靜態成員?
- 21. 爲什麼C++ CLI不允許使用擴展方法?
- 22. 爲什麼C++允許對派生類方法進行更嚴格的訪問?
- 23. Python裝飾類不允許方法調用。爲什麼?
- 24. 允許類屬性是的WebAPI 2員額方法無效
- 25. 允許`this->`訪問從屬基類成員的規則是什麼?
- 26. 爲什麼在C++額外的方法資格是不允許的?
- 27. 爲什麼不允許多次定義一個C結構的成員?
- 28. 爲什麼不允許重載方法內的方法(例如重載閉包)?
- 29. 爲什麼繼承成員不被允許?
- 30. C++,內部類和爲什麼只能創建成員作爲指針
也許沒有副作用,所以檢查這將是多餘的。 – 2010-02-15 08:48:28
雅我同意沒有副作用,但我的問題本身是否有任何具體的用例,這變得有用。 – Ravisha 2010-02-15 08:50:45