0

私の C# プロジェクトには、次のような他のメソッドを呼び出すメソッドがあります。

options = ReferenceUtilities.GetMenuStatuses();

私の ReferenceUtilities では、次のようにコーディングしました。

   internal static SelectList GetMenuStatuses()
    {
        throw new NotImplementedException();
    }

しかし、内部またはプライベートを使用する必要がありますか? ここの違いはよくわかりません。

4

4 に答える 4

2

人々がすでに回答しているように、内部とは、同じアセンブリ内の他のコードからメンバーにアクセスできることを意味します。private は、同じクラス内の他のコードからアクセスできることを意味します。

ただし、追加する重要な点が 1 つあります。Properties/Assemblyinfo.cs では、[assembly: InternalsVisibleTo("something")] ステートメントを追加できます。これにより、別のアセンブリから内部メソッドにアクセスできます。

これは単体テストの目的で非常に便利であり、プライベートではなく internal を使用する正当な理由となります。

(単体テストの内部については大きな議論がありますが、その可能性について知っておくとよいでしょう。)

于 2014-09-30T19:11:27.903 に答える
1

internal同じアセンブリ内の他のコードからメンバーにアクセスできることを意味します。private同じクラスの他のコードからアクセスできることを意味します。

これは、メソッドが他のメソッドを呼び出すかどうかとは関係ありません。

于 2012-10-13T23:44:20.290 に答える
1

internalアセンブリprivate間、クラス間

  • internal: 他のアセンブリからのコードには表示されず、このアセンブリでのみ表示されます
  • private: 他のクラスからは見えません。このクラスでのみ表示されます
  • public: 他のクラスまたはアセンブリから見える [クラス用]
于 2012-10-13T23:52:37.900 に答える
0

内部とは、同じアセンブリ内の他のクラスがメソッドを参照できることを意味します。Private は、メソッドが定義されているクラスだけがそれを見ることができることを意味します。メソッドがそれを定義するクラスによってのみ呼び出される場合は、private を使用します。それ以外の場合は、internal を使用します。Public は、アセンブリ外のクラスがメソッドを直接呼び出す必要がある場合にのみ使用してください。

いつものように、例外はありますが、これは従うべき一般的な規則です。

もう少し先に進むと、サービス クラス (つまり、サービスまたは機能を提供するためだけに存在するメソッド) は、そのサービスまたは機能のコントラクトを定義するインターフェイスを実装する必要があります。他のクラスは、インターフェイス メソッドのみが使用できるように、そのインターフェイスのインスタンスを渡す必要があります。

于 2012-10-13T23:46:17.933 に答える