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

本文关键字:对象 属性 何访问 访问 | 更新日期: 2023-09-27 17:50:57

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

  • 消息

      <
    • 名称/gh>
    • EmailAddress
    • Email (Emailer的一个实例)
  • 写信人
    • Send()//这是个方法

我如何设置这个,以便分配给Message的Emailer实例可以访问方法的属性?例如:

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();

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

您的层次结构错误。

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


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

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

MessageEmailer之间没有父子关系/继承,更像是组合,其中Message包含Emailer的对象。你不能在Emailer中访问Message属性。

Emailer中的Send方法应该接收一个类型为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);

在这种情况下,父子关系是反向的。邮件不需要知道发送邮件的人的任何信息。EmailerSend方法应该给出一个Message作为参数:

public class Message
{
    public string Name;
    public string EmailAddress;
    public string Text;
    public Message(string name, string emailAddress, string text)
    {
        this.Name = name;
        this.EmailAddress = emailAddress;
        this.Text = text;        
    }
}
public class Emailer
{
    public void Send(Message message)
    {
        // Send email using Message Properties
    }
}

将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
    }
}

虽然其他答案都是正确的,但您不会想要拥有拥有Emailer的Message,这里有一种方法可以做到这一点。我提供这些只是为了让你理解孩子是如何知道父母的。

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;        
    }
}

然后,要创建消息,您可以从Emailer内部执行此操作:

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

我不是提倡你这样做,只是为了教育目的而演示如何做到这一点。