我正在使用 C# 尝试实现使用相同接口(interface)的 2 个类。 两个类都只需要一种方法。 但是,这两种方法需要具有不同的类型,采用不同的参数。 我真的很想能够从接口(interface)继承一个方法并在每个类中覆盖它,因为这会很好而且整洁(接口(interface)是程序功能所必需的(使用依赖注入(inject))) 不幸的是,这两个类也是必需的,因为电子邮件发件人类将在其他程序中重复使用。
我找到了一个几乎适合我的问题的解决方案,它是: Implementing methods from an interface but with different parameters
不同之处在于我的两个类中的每一个都应该只调用一个方法。
这是我的代码(已尝试在之前的解决方案中实现泛型):
interface IEmailSender<T>
{
T DoEmail();
}
public class EmailGenerator : IEmailSender<MailMessage>
{
public override MailMessage DoEmail(string emailAddress)
{
MailMessage message = new MailMessage();
//code to generate email message
return message;
}
}
public class EmailSender : IEmailSender<bool>
{
public override bool DoEmail(MailMessage message)
{
//code to send email
return true;
}
}
理想情况下,我希望我的电子邮件发件人方法为 void,但如果它必须具有返回值,我不介意它返回一个 bool 值。
希望这是有道理的,我真的只是想在这里保持整洁,因为目前为了让它工作,我需要在我的接口(interface)中有两个方法并且让每个类调用一个空方法。
提前致谢
最佳答案
您似乎因为糟糕的架构而苦苦挣扎。 EmailGenerator
不是 IEmailSender
。您绝不会将其用作 IEmailSender
。
我会推荐这个:
interface IEmailGenerator{
MailMessage BuildMailMessage(string message)
}
interface IEmailSender
{
void SendEmail(string message);
}
public class EmailGenerator : IEmailGenerator{
public MailMessage BuildMailMessage(string message)
{
return new MailMessage();
}
}
public class EmailSender : IEmailSender
{
private readonly IEmailGenerator _emailGenerator;
public EmailSender (IEmailGenerator emailGenerator){
_emailGenerator = emailGenerator;
}
public void SendEmail(string message)
{
var message = _emailGenerator.BuildMailMessage(message);
//send email
}
}
通过这种方式,您已经清楚地区分了发送电子邮件和生成电子邮件之间的区别(和关注点)。您可以使用 DI 将所有内容连接在一起:
class Consumer{
private IEmailSender _emailSender;
Consumer(IEmailSender emailSender){ _emailSender = emailSender;}
void Method()
{
string msg = "Hello Wolrd!"
_emailSender.SendEmail(msg);
}
}
关于c# - 一种接口(interface)方法的不同类型实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25565866/