子对象如何访问其父对象的属性
本文关键字:对象 属性 何访问 访问 | 更新日期: 2023-09-27 17:50:57
我有两个类:Message
和Emailer
具有以下(示例)属性:
消息
- <
- 名称/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
;相反,它应该能够发送尽可能多的电子邮件。
你问题的实际答案是,你不能。
相反,您可以将该对象作为构造函数参数传递。
Message
和Emailer
之间没有父子关系/继承,更像是组合,其中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);
在这种情况下,父子关系是反向的。邮件不需要知道发送邮件的人的任何信息。Emailer
的Send
方法应该给出一个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);
我不是提倡你这样做,只是为了教育目的而演示如何做到这一点。
相关文章:
- 当我有接口通过我传递参数时,如何访问对象属性
- 解构赋值 - C# 中变量的对象属性
- 如何使用自动映射器将单个对象属性映射到复杂类型的对象数组
- 使用自动映射器获取专利对象属性值
- 根据对象属性列出差异
- 如何使用 LINQ 和包含更新匿名对象属性
- 将对象属性转换为不同的可查看对象
- 子对象属性的 Linq 包含
- 使用字符串获取对象属性
- 使用表达式树而不是反射获取和设置对象属性
- 根据另一个列表中的对象属性对列表进行排序
- 使用 json.net 的对象属性的条件序列化/反序列化
- 将对象属性转换为字典表中的人类友好字符串
- 对象属性的排序
- 如何将包含的对象/属性序列化为根
- 如何在 aspx 页中引用另一个对象属性
- 动态检测从不同项目传递的 dll 中的对象属性
- 动态 ForEach 循环以更新对象属性值
- 是否可以从剪贴板读取对象属性
- 在将对象添加到数据库后访问对象属性