具体的には、ネストされたクラスを使用する場合と使用しない場合の具体的な例を誰か教えてもらえますか?
この機能については以前から知っていましたが、使用する理由がありませんでした。
ありがとう。
具体的には、ネストされたクラスを使用する場合と使用しない場合の具体的な例を誰か教えてもらえますか?
この機能については以前から知っていましたが、使用する理由がありませんでした。
ありがとう。
ネストされたクラスが外部クラスによってのみ使用される場合、コレクションの列挙子クラスの例として、不要になった優れた例があります。
別の例として、列挙型がクラス内のメソッドで使用されるtrue falseパラメーターを置き換えて、呼び出しシグネチャを明確にする場合があります。
それ以外の
public class Product
{
public void AmountInInventory(int warehouseId, bool includeReturns)
{
int totalCount = CountOfNewItems();
if (includeReturns)
totalCount+= CountOfReturnedItems();
return totalCount;
}
}
と
product P = new Product();
int TotalInventory = P.AmountInInventory(123, true);
これにより、「true」が何を意味するのかが不明確になり、次のように書くことができます。
public class Product
{
[Flags]public enum Include{None=0, New=1, Returns=2, All=3 }
public void AmountInInventory(int warehouseId, Include include)
{
int totalCount = 0;
if ((include & Include.New) == Include.New)
totalCount += CountOfNewItems();
if ((include & Include.Returns) == Include.Returns)
totalCount += CountOfReturns();
return totalCount;
}
}
product P = new Product();
int TotalInventory = P.AmountInInventory(123, Product.Include.All);
これにより、クライアントコードでパラメータ値が明確になります。
ネストされたクラスを使用する2つの場所:
ネストされたクラスは外部クラスによって排他的に使用され、完全にプライベートなスコープが必要です。
ネストされたクラスは、他の場所で定義されたインターフェイスを実装するために特に使用されます。たとえば、列挙子の実装はこのカテゴリに分類されます。
ネストされたクラスが他の場所で使用されることが意味をなさないことが確実な場合にのみ、ネストされたクラスを使用する必要があります。
たとえば、関数に関連付けられたいくつかのタイプのオブジェクトのリストと、そのオブジェクトのセットに関するメンバー情報 (メソッドやプロパティなど) を短時間で作成する必要がある場合は、ネストされたクラスを使用してそれを行うことができます。あるタイプのオブジェクトのすべての組み合わせのリストを作成し、特定のプロパティを持つすべての組み合わせをマークする必要があるかもしれません。これは、ネストされたクラスの場合に適しています。
ネストされたクラスでメソッドが必要ない場合は、おそらく構造体を使用できますが、IL がそれらを別の方法で処理するかどうかはわかりません。
親クラス内の関数または2つに必要な単純なヘルパークラスにこれを使用することがあります。
実際の例については、今朝早くに尋ねられたこの質問を参照して
ください。同じアセンブリ内の他の1つのオブジェクトだけがオブジェクトにアクセスできるようにしますか?
概要:関連するデータクラスをそのビジネスオブジェクト内にネストできます。
特別な目的のデータ構造が1つのクラス内でのみ使用される場合、または特定の例外が1つのクラス内でのみスローおよびキャッチされる場合に、ネストされたクラスのケースを見てきました。
システム内の他のオブジェクトから見える必要のないヘルパー クラスがある場合、クラスをネストします。これにより、可視性が可能な限り制限され、意図しないクラスの使用を防ぐことができます。