gpt4 book ai didi

c# - 将对象格式化为主题和正文的通用方法?

转载 作者:太空狗 更新时间:2023-10-30 00:31:42 25 4
gpt4 key购买 nike

我正在尝试获取对象列表并将它们格式化为电子邮件主题和正文。为了说明我在做什么,请使用以下示例:

public string GetSubject(Person myPerson) 
{
return String.Format("To {0}", myPerson.Name);
}

public string GetMessage(Person myPerson)
{
return String.Format("Dear {0}, Your new salary: {1}",
myPerson.Name, myPerson.Salary);
}

public string GetSubject(VacationDay dayOff)
{
return String.Format("Vacation reminder!");
}

public string GetMessage(VacationDay dayOff)
{
return String.Format("Reminder: this {0} is a vacation day!", dayOff.Name);
}

后来我有一堆邮件想批量发送:

// myEmailObjects is a "List<object>"
foreach (var emailItem in myEmailObjects)
{
SendEmail(from, to, GetSubject(emailItem), GetMessage(emailItem));
}

问题是此代码无法编译,因为编译器无法解析要调用哪个 GetSubject 和哪个 GetMessage 例程。有没有什么通用的方法可以在不到处使用 isas 运算符来检查类型的情况下编写它?

最佳答案

这就是接口(interface) 的用途。从概念上讲,接口(interface)就像一个契约(Contract),类可以在它必须定义接口(interface)指定的方法的地方签署该契约(Contract)。定义每个 GetSubject()GetMessage()方法作为相应类的成员方法,然后创建以下接口(interface):

public interface IEmailable {
string GetSubject();
string GetMessage();
}

然后,让所有涉及的类实现接口(interface):

public class VacationDay : IEmailable

您现在可以创建 List<IEmailable>() ,您可以在其元素上调用这两个方法。

关于c# - 将对象格式化为主题和正文的通用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23742460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com