C# 在另一个类C中创建对象?

C# 在另一个类C中创建对象?,c#,sql-server,visual-studio,ado.net,C#,Sql Server,Visual Studio,Ado.net,我正在进入oop的第一步,这需要删除我的应用程序,并将其全部重新设计为三层和面向对象的。叹气我有一个提交对象,它应该包含一个customer对象以及一个broker和coverage对象;我想在每个包含的对象的字段中存储来自db的一些datareader结果,但是当我试图用一个新提交对象调用Customer对象时,我什么也得不到。VS无法识别提交包含客户对象。我显然遗漏了一些关键点,所以考虑到这一点,想法?代码如下 //This is the Submission class here publ

我正在进入oop的第一步,这需要删除我的应用程序,并将其全部重新设计为三层和面向对象的。叹气我有一个提交对象,它应该包含一个customer对象以及一个broker和coverage对象;我想在每个包含的对象的字段中存储来自db的一些datareader结果,但是当我试图用一个新提交对象调用Customer对象时,我什么也得不到。VS无法识别提交包含客户对象。我显然遗漏了一些关键点,所以考虑到这一点,想法?代码如下

//This is the Submission class here
public class Submission 
{
    public int SubmissionId {get;set;}
    public int Status { get; set; }
    public string StatusComment { get; set; }


    public class Customer
    {
        //public Customer() { }
        public int CustId { get; set; }
        public string CustName { get; set; }
        public string CustAddress { get; set; }
        public string CustState { get; set; }
        public string CustCity { get; set; }
        public int CustZip { get; set; }
        public int SicNaic { get; set; }

    }

    public object Customer();
}


//These lines throw an error:
无法通过表达式引用类型。VS无法识别TempSubmission.Customer对Submission中的Customer对象的调用

public class Submission
{
    public Submission()
    {
        this.Customer = new Customer();
    }

    public int SubmissionId { get; set; }
    public int Status { get; set; }
    public string StatusComment { get; set; }
    public Customer Customer { get; set; }
}
public class Customer
{
    //public Customer() { }
    public int CustId { get; set; }
    public string CustName { get; set; }
    public string CustAddress { get; set; }
    public string CustState { get; set; }
    public string CustCity { get; set; }
    public int CustZip { get; set; }
    public int SicNaic { get; set; }
}

哦。。从哪里开始?将您的Customer类放在自己的Customer.cs文件中,将您的Submission类放在自己的Submission.cs文件中

然后,您可以执行以下简单的提交类:

public class Submission 
{
        // consider implementing the below as properties to more finely control access
        public int SubmissionId;
        public int Status;
        public string StatusComment;
        public Customer SubmissionCustomer; // <-- this is null until you set it to a Customer object, either in the constructor or externally.

        public Submission() {
          // constructor
        }

}
然后阅读有关属性和构造函数的内容,并根据需要添加它们。见:

属性具有私有/公共模式。至于建造商:

见:


每当您创建类的实例对象时,都会调用构造函数。

仅在Submission中定义Customer对象不会使Submission包含Customer的实例。对于您想要执行的操作,只需将Customer置于Submission外部,并在Submission内部定义Customer属性。

您正试图通过tempSubmission引用实际类型Customer。相反,您必须引用一个Customer实例,该实例将通过属性或类似内容公开。

问题在于您的客户类型不是特定的,它被定义为一个对象而不是客户

public class Submission
{
    public Submission()
    {
        this.Customer = new Customer();
    }

    public int SubmissionId { get; set; }
    public int Status { get; set; }
    public string StatusComment { get; set; }
    public Customer Customer { get; set; }
}
public class Customer
{
    //public Customer() { }
    public int CustId { get; set; }
    public string CustName { get; set; }
    public string CustAddress { get; set; }
    public string CustState { get; set; }
    public string CustCity { get; set; }
    public int CustZip { get; set; }
    public int SicNaic { get; set; }
}
要实现您想要做的事情,您必须向提交类添加一个新成员(在本例中为Customer类型的属性),就像您对public object Customer所做的那样;基本上,定义一个名为Customer of type object的方法

您要做的是定义一个类型为Customer的属性,称为whatever,例如RelatedCustomer


我认为您希望Customer类位于Submission类之外,Submission类包含Customer的实例

public class Submission
{
    public Submission()
    {
        this.Customer = new Customer();
    }

    public int SubmissionId { get; set; }
    public int Status { get; set; }
    public string StatusComment { get; set; }
    public Customer Customer { get; set; }
}
public class Customer
{
    //public Customer() { }
    public int CustId { get; set; }
    public string CustName { get; set; }
    public string CustAddress { get; set; }
    public string CustState { get; set; }
    public string CustCity { get; set; }
    public int CustZip { get; set; }
    public int SicNaic { get; set; }
}

尝试使用声明移动到Top当前您将Customer定义为提交的内部类,我认为这不是您想要的。您希望customer与Submission一起成为顶级类,而不是让Submission包含对customer实例的引用。您将成员添加为公共字段,属性可能是更好的选择。同意,只是尝试保持简单的开始;Brazos-使用属性。谢谢,@Mikey。这就是我需要的。有这么多的信息,当你不知道正确的问题时,很难找到正确的东西,你知道吗?没问题。OT。但我在为我正在修理的一辆旧车找换档操纵带时遇到了类似的问题。。谁知道这叫什么?堆栈溢出是一个很好的资源,我将启动Spring框架,并计划在此过程中提出许多问题!通过创建私有变量,然后右键单击它并选择重构->封装字段,可以使用VS自动创建属性。享受