对象作为属性?

时间:2012-10-22 09:32:57

标签: c#

我(作为新的oop和c#hobbiist)想就以下(简化)问题寻求一些指导:

我做了一个小班(让我们称之为A),有4个属性和几个方法。还有一个更大的类(B),带有~10个props,它应该包含12个A类对象,以及相当多的函数来使用道具。我有我的主类M(这是一个Windows窗体),一个Filereader类(F)来处理所有I / O.

我在wm_devicechange上创建了一个windows事件,应该读取usb,创建一个F的对象。现在当F读取文件时,它应该填充B类中对象的属性,这是在F类中创建的。现在的问题是,我无法从我的主类访问B的这个对象。问题是如何做到这一点?

我应该制作B类型的F属性吗?这是常见做法吗? 我应该在我的主要班级中制作B的对象吗? 当在B类型的F中制作一个属性时,它是否仅存储并传递参考,如果从M?

获取

我想尽量避免无用的复制对象等等,但是这个oop的话题对我来说是如此的压倒性,即使在几本书之后,我甚至不确定这个问题有多大意义。我已经阅读了3次this文章,但我仍然感到困惑的是处理这样一个"问题的良好做法"?

由于

4 个答案:

答案 0 :(得分:1)

您提到的所有方法都是合理的,但其中一种可能更直观,更优雅。

B级究竟是什么?如果它是读取文件的某种结果,你可能想要从执行读取的F方法中返回它。

答案 1 :(得分: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;

答案 2 :(得分:0)

您不会因为对象分配而浪费空间,因为C#中的所有对象类都是reference types。不过,在我看来,您应该在inheritancenested classes

之间做出决定

对于继承,您将执行以下操作:

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

对于嵌套类,您将拥有:

public class F
{
    public class B
    {
    }
}

答案 3 :(得分:0)

如果你分配对象,它只是引用,所以同一个实例。如果需要在两个对象之间共享对象,请将该对象作为构造函数或某个方法/属性中的参数传递。然后,具有此引用的所有对象都可以访问相同的实例(数据)。如果您需要不同的“数据集” - 实例,只需创建其他对象实例...