0

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

我创建了一个小类(我们称之为 A),它有 4 个属性和几个方法。还有一个更大的类(B),有大约 10 个道具,它应该包含 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 次,但我仍然很困惑处理这样的“问题”的好做法是什么?

谢谢

4

4 回答 4

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

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

于 2012-10-22T09:41:09.437 回答