我(作为新的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文章,但我仍然感到困惑的是处理这样一个"问题的良好做法"?
由于
答案 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。不过,在我看来,您应该在inheritance和nested classes
对于继承,您将执行以下操作:
public class F : B
{
//class F definition here
}
对于嵌套类,您将拥有:
public class F
{
public class B
{
}
}
答案 3 :(得分:0)
如果你分配对象,它只是引用,所以同一个实例。如果需要在两个对象之间共享对象,请将该对象作为构造函数或某个方法/属性中的参数传递。然后,具有此引用的所有对象都可以访问相同的实例(数据)。如果您需要不同的“数据集” - 实例,只需创建其他对象实例...