子对象如何访问其父对象的属性?

时间:2014-03-18 14:46:21

标签: c# asp.net

我有两个类:MessageEmailer,具有以下(示例)属性:

  • 消息

    • 名称
    • EmailAddress的
    • 文本
    • 电子邮件(电子邮件的一个实例)
  • 的emailer

    • 发送()//这是一个方法

如何设置它以便分配给Message的Emailer实例可以访问方法的属性? e.g:

public class Message
{
    public string Name;
    public string EmailAddress;
    public string Text;
    public Emailer Email = new Emailer();

    public Message(string name, string emailAddress, string text)
    {
        this.Name = name;
        this.EmailAddress = emailAddress;
        this.Text = text;        
    }
}

public class Emailer
{
    public void Send()
    {
        // Send email using Message Properties
    }
}

Message myMessage = new Message('Joe Blow', 'example@email.com', 'Boom Boom Pow');
myMessage.Email.Send();

5 个答案:

答案 0 :(得分:1)

您的层次结构错误。

Message不应拥有Emailer。相反,Emailer应在其Message方法中接受Send() 换句话说,Emailer 实例不应该绑定到单个Message;相反,它应该能够发送任意数量的电子邮件。


你问题的实际答案是,你不能。

相反,您可以将对象作为构造函数参数传递。

答案 1 :(得分:1)

MessageEmailer之间没有父子关系/继承,它更像是组合,其中Message包含Emailer的对象。您无法访问Message中的Emailer个媒体资源。

Send中的方法Emailer应该收到Message类型的对象,然后相应地发送电子邮件。

public static class Emailer
{
    public static void Send(Message message)
    {
    }
}

您的班级Emailer看起来更像是负责发送讯息的实用工具类。您可以将其声明为static,然后将其用作:

Message myMessage = new Message('Joe Blow', 'example@email.com', 'Boom Boom Pow');
Emailer.Send(myMessage);

答案 2 :(得分:0)

在这种情况下,你是父母;孩子的关系是倒退的。该消息不需要知道发送它的电子邮件的任何信息。 Send的{​​{1}}方法应该以{{1​​}}作为参数:

Emailer

答案 3 :(得分:0)

将Message对象作为参数发送到Emailer构造函数中:

public Emailer Email = new Emailer(this);

然后你可以访问父母:

public class Emailer
{
    private Message _message;

    public Emailer(Message mesage)
{
    _message = message;
}

    public void Send()
    {
        // Send email using Message Properties
        // use _message
    }
}

答案 4 :(得分:0)

虽然其他答案都是正确的,并且您不希望拥有拥有电子邮件程序的消息,但您可以采用这种方式。我提供这一点只是为了让您了解孩子如何了解其父母。

public class Message
{
    public string Name;
    public string EmailAddress;
    public string Text;
    public Emailer Email = new Emailer();

    public Message(string name, string emailAddress, string text, Emailer emailer)
    {
        this.Name = name;
        this.EmailAddress = emailAddress;
        this.Text = text;
        this.Email= emailer;        
    }
}

然后,要创建消息,您可以在电子邮件内部执行此操作:

Message mymessage=new Message("John Doe","John.Doe@example.com", "Hello, world!", this);

我并不主张你这样做,只是说明如何为教育目的而做。