[解決済み】なぜ内部クラスでパブリックメソッドを使用するのですか?
質問
私たちのプロジェクトの1つに、次のようなコードがたくさんあります。
internal static class Extensions
{
public static string AddFoo(this string s)
{
if (s == null)
{
return "Foo";
}
return $({s}Foo);
}
}
これを行う明確な理由は、"後で型を公開するのが簡単だから、" 以外にあるでしょうか。
非常に奇妙なエッジケース(Silverlightにおけるリフレクション)でしか問題にならないか、まったく問題にならないのではないかと思っています。
解決方法は?
UPDATE: この質問は 2014年9月にブログで取り上げたテーマ . 素晴らしい質問をありがとうございました
この質問については、コンパイラー・チーム内でもかなりの議論があります。
まず、ルールを理解することが賢明です。クラスや構造体のパブリック・メンバーとは、以下のようにアクセス可能なメンバーのことです。 を含む型にアクセスできるものであれば、何にでもアクセスできます。 . つまり、内部クラスのパブリックメンバーは、事実上内部クラスです。
では、内部クラスがある場合、アセンブリでアクセスしたいメンバはpublicとinternalのどちらでマークすべきでしょうか。
私の意見は、そのようなメンバーはpublicとマークすることです。
私は、quot;public" を、quot;このメンバは実装の詳細ではない、という意味で使っています。protected メンバは実装の詳細であり、派生クラスを動作させるために必要な何かがあります。内部メンバは実装の詳細です。このアセンブリの内部の他の何かが、正しく動作するためにこのメンバを必要とします。public メンバは、「このメンバは、このオブジェクトが提供する主要な、文書化された機能を表します。
基本的には、「この内部クラスをパブリッククラスにすることにした」という姿勢です。そのために、私は たった一つのこと クラスのアクセシビリティ 内部クラスをパブリッククラスにするということは、内部メンバもパブリックメンバにしなければならないのであれば、そのメンバは パブリックサーフェスエリア であり、そもそもパブリックであるべきなのです。
他の人は反対です。あるメンバの宣言を一目見て、それが内部コードからのみ呼び出されるものなのかどうかがすぐにわかるようにしたい、というコンテンポラリーな人たちもいるのです。
例えば、内部インタフェースを実装する内部クラスは、実装メンバをpublicとマークしなければなりません。 それらはクラスのパブリックサーフェスの一部です。 .
関連
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] EqualsメソッドがオーバーライドされたときにGetHashCodeをオーバーライドすることが重要な理由は何ですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] C#で同期メソッドから非同期メソッドを呼び出すには?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み】C#の "internal "キーワードの実用的な使い方
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である