0

私は (新しい oop および c# 愛好家として) 次の (簡略化された) 問題についてガイダンスを求めたいと思います。

4 つのプロパティといくつかのメソッドを持つ小さなクラス (A と呼びましょう) を作成しました。また、最大 10 個の小道具を持つより大きなクラス (B) であり、クラス A の 12 個のオブジェクトと、小道具を操作するためのかなりの量の関数が含まれている必要があります。すべての I/O を処理するメイン クラス M (Windows フォーム)、Filereader クラス (F) があります。

wm_devicechange で Windows イベントを作成し、usb を読み取って F のオブジェクトを作成しました。F がファイルを読み取ると、クラス F で作成されたクラス B のオブジェクトのプロパティを入力する必要があります。問題は、メイン クラスから B のこのオブジェクトにアクセスできないことです。問題は、これを正しく行う方法です。

タイプBであるFのプロパティを作成する必要がありますか? それは一般的な慣行ですか?メインクラスで B のオブジェクトを作成する必要がありますか? タイプBのFでポパティを作成するとき、Mから取得した場合に参照を格納して渡すだけですか?

オブジェクトの無用なコピーなどを避けたいと思っていますが、この oop のトピックは今の私にとって非常に圧倒されています。私はこの記事を 3 回読みましたが、そのような「問題」を処理するための適切な方法は何ですか?

ありがとう

4

4 に答える 4

1

あなたが言及したすべてのアプローチはもっともらしいですが、そのうちの1つはおそらくより直感的でエレガントです.

Bクラスって具体的に何?ファイルを読み取った結果のようなものである場合、読み取りを行う F の何らかのメソッドから結果を返したいと思うでしょう。

于 2012-10-22T09:46:02.387 に答える
1
public class Form
{
    USBReader reader;
    CollectedData data;
    public Form()
    {
        reader = new USBReader();
    }

    public void ReadUSBData() 
    {
        data = reader.ReadUSBData();
    }
}
// Type F
public class USBReader 
{
    public CollectedData ReadUSBData() 
    { // usb read logic.
    }
}

//Type B
public class CollectedData {
    List<A> list = new List<A>();   
}

public class A { }

USB リーダーがデータを返す単純な実装は、次のようになります。

一般に、データの読み取りなどのアクションは、データ モデル (ここでは B と A) の戻り値の型を持つオブジェクトのメソッドです。プロパティはオブジェクトの属性ですが。たとえば、USBReader は、次のようなわかりやすい名前のプロパティを持つことができますint BufferSize

于 2012-10-22T09:47:16.627 に答える
0

C# のすべてのオブジェクトクラスは参照型であるため、オブジェクトの割り当てによってスペースが無駄になることはありません。ただし、私の意見では、継承ネストされたクラスのどちらかを決定する必要があります

継承の場合は、次のようにします。

public class F : B
{
    //class F definition here
}

ネストされたクラスの場合、次のようになります。

public class F
{
    public class B
    {
    }
}
于 2012-10-22T09:40:19.827 に答える
0

オブジェクトを代入すれば単なる参照なので同じインスタンス。2 つのオブジェクト間でオブジェクトを共有する必要がある場合は、コンストラクターまたは何らかのメソッド/プロパティでオブジェクトをパラメーターとして渡します。この参照を持つすべてのオブジェクトは、同じインスタンス (データ) にアクセスできます。別の「データセット」-インスタンスが必要な場合は、オブジェクトの他のインスタンスを作成するだけです...

于 2012-10-22T09:41:09.437 に答える