【问题标题】:How to work with an object that was instantiated inside another object from a ASP.NET web form如何使用在 ASP.NET Web 表单的另一个对象中实例化的对象
【发布时间】:2013-01-03 16:52:47
【问题描述】:

这可能是一个非常简单的问题,但是当涉及到使用从包含类型是另一个类的字段的类创建的对象时,我有点困惑。让我困惑的部分是如何使用来自 Web 表单的数据填充该字段。

例如,如果我有一个customer 类,其中有一个名为contact 的字段是Contact,那么在Web 表单级别填充它的正确方法是什么?目前我正在做如下,想知道这是否正确。

这是我的 customer 类的代码,contact 是另一个类。

public class Customer
{
    private string firstName;
    private string lastName'
    private string notes;
    private Contact contact;

    public Customer()
    {
        this.contact = new Contact();
    }

    public string FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }

    public string LastName
    {
        get { return lastName; }
        set { lastName = value; }
    }
    public string Notes
    {
        get { return notes; }
        set { notes = value; }
    }
    public Contact Contact
    {
        get { return contact; }
        set { contact = value; }
    }
}

我的表单中的代码

private Customer customer;

public WebFormSample()
{
     customer = new AddressBook.Customer();
}
protected void addButton_Click(object sender, EventArgs e)
{
     customer.FirstName = firstName.Text;
     customer.LastName = lastName.Text;
     customer.Contact.Phone = phone.Text;
     customer.Contact.Email = Email.Text;
}

这是我应该使用contact 对象的方式,还是我应该在Web 表单上实例化contact 对象,填充它然后将其分配给customer 对象中的联系人,或者我得到了它完全错误,应该以完全不同的方式完成?

希望这是有道理的。

谢谢

【问题讨论】:

    标签: c# asp.net oop


    【解决方案1】:

    您是否尝试过您发布的代码?因为我希望customer.Contactnull,因为您从未为它创建实例。

    因此您可以像这样修复现有代码:

    customer.Contact = new Contact();
    customer.Contact.Phone = phone.Text;
    customer.Contact.Email = Email.Text;
    

    或者你可以按照你的要求做:

    var contact = new Contact();
    contact.Phone = phone.Text;
    contact.Email = Email.Text;
    customer.Contact = contact;
    

    根据您的需要,任何一个都可以。

    【讨论】:

    • 你是对的 Customer.Contact 为空,我在 Customer 类中初始化它的原因是因为我要在 Web 表单中创建一个新联系人并将其分配给 Cusomter.Contact 使用财产。在这一点上,我认为这个类以及所有相关类的设计存在缺陷,因为当我将 Customer 传递给将其保存到数据库的方法时,我发现我将一长串属性和我想知道这是否是一种糟糕的编码习惯。例如。 Customer.Contact.Address.Email.
    【解决方案2】:

    大概是这样的:-

    Customer.Contact = new Contact { Phone = phone.Text
                                              , Email = Email.text };
    

    【讨论】:

      【解决方案3】:

      客户类不应该负责创建联系人类,它应该从外部(通过构造函数或公共属性)获取联系人实例。

      如果有机会,你应该阅读更多关于依赖注入的内容。

      【讨论】:

        猜你喜欢
        • 2018-12-13
        • 2019-02-16
        • 1970-01-01
        • 2014-10-31
        • 2012-07-07
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多