我有两个类:Message
和Emailer
,具有以下(示例)属性:
消息
的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();
答案 0 :(得分:1)
您的层次结构错误。
Message
不应拥有Emailer
。相反,Emailer
应在其Message
方法中接受Send()
换句话说,Emailer
实例不应该绑定到单个Message
;相反,它应该能够发送任意数量的电子邮件。
你问题的实际答案是,你不能。
相反,您可以将对象作为构造函数参数传递。
答案 1 :(得分:1)
Message
和Emailer
之间没有父子关系/继承,它更像是组合,其中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);
我并不主张你这样做,只是说明如何为教育目的而做。