Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象作为属性?_C# - Fatal编程技术网

C# 对象作为属性?

C# 对象作为属性?,c#,C#,我(作为新的oop和c#HobbiList)想就以下(简化的)问题寻求一些指导: 我创建了一个小类(我们称之为a),它有4个属性和几个方法。还有一个更大的类(B),有大约10个道具,它应该包含12个a类对象,以及相当数量的使用道具的功能。我有一个主类M(它是一个windows窗体),一个文件阅读器类(F)来处理所有I/O 我在wm_devicechange上创建了一个windows事件,usb应该被读取,并生成一个F对象。现在,当F读取文件时,它应该填充在F类中创建的B类对象的属性。现在的问题是

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

我创建了一个小类(我们称之为a),它有4个属性和几个方法。还有一个更大的类(B),有大约10个道具,它应该包含12个a类对象,以及相当数量的使用道具的功能。我有一个主类M(它是一个windows窗体),一个文件阅读器类(F)来处理所有I/O

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

我应该为F创建一个类型为B的属性吗?这是惯例吗? 我应该在我的主课上把B作为宾语吗? 当在类型B的F中创建一个poperty时,它是否只存储并传递从M获取的引用

我想尽量避免对对象进行无用的复制之类的,但是oop这个话题现在对我来说太过重要了,即使在读了几本书之后,我甚至不确定这个问题是否有意义。我已经读了三遍这篇文章,但我仍然不知道处理这样一个“问题”的好做法是什么


谢谢

您不会因为对象分配而浪费空间,因为C#中的所有对象类都是。然而,我认为你应该在和之间做出决定

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

public class F : B
{
    //class F definition here
}
对于嵌套类,您将有:

public class F
{
    public class B
    {
    }
}

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

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

B班到底是什么?如果它是读取文件的某种结果,您可能希望从执行读取的某个F方法返回它。

公共类表单
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 { }
{ USBReader阅读器; 收集数据; 公共表格() { reader=新的USBReader(); } public void ReadUSBData() { data=reader.ReadUSBData(); } } //F型 公营面包机 { 公共收集的数据ReadUSBData() {//usb读取逻辑。 } } //B型 公共类收集的数据{ 列表=新列表(); } 公共A类{}
一个简单的实现可以像这样,您的USB读卡器返回数据


通常,像读取数据这样的操作是对象上的方法,返回类型为数据模型(这里是B和a)。而属性是对象的属性。e、 g.USBReader可以有一个自解释名称的属性,如
int BufferSize

我已经把你的问题读了3-4遍了,但还是不知道到底是什么问题。请发布一些代码。尝试创建一个简单且自包含的代码示例,帮助解释您所做的工作和要求,并将其发布在此处。=)如果显示类型定义,问题将更容易回答。还有值类型的对象。这个B类应该包含我从usb读取的大部分信息。然后基于userinput,我将处理数据,几步之后我将覆盖usb上的文件。表单处理用户输入,但软件的核心应该是通过最小化读写操作一些文件。然后我认为您应该在USB reader类的构造函数中进行所有读取,并将信息存储在B对象中,这应该是USB reader类的属性。谢谢您的回复,如果可以的话,我很可能会投票支持你的答案,但是错过了15个共和国。我想这也有助于我理解,就像尼莱肖汉的回答一样,我现在正盯着你的答案,我想这就是我一直在寻找的答案。如果我理解正确,我将能够从我的表单类中访问所有getters setter和“data”的公共函数?同时我也尝试过它,它工作得非常好。关于这一联系,如果第二个案例发生在这里,那么我完全理解发生了什么所以我接受了你的解决方案作为答案,非常感谢NileshChauhanIt确实如此。reader.ReadUSBData()在内存中创建一个对象,该对象的地址将返回并最终捕获到数据中,。它可供您使用数据作为句柄进一步操作。属性和方法值得您使用。指针:谢谢你的回答,这是我想的,但我自己从来不敢写