Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个接口方法的不同类型实现_C#_Generics_Interface - Fatal编程技术网

C# 一个接口方法的不同类型实现

C# 一个接口方法的不同类型实现,c#,generics,interface,C#,Generics,Interface,我在c#中工作,试图实现两个使用相同接口的类。 两个类各自只需要一个方法。 然而,这两种方法需要具有不同的类型,采用不同的参数。 我真的希望能够从接口继承一个方法,并在每个类中覆盖它,因为这将是很好和整洁的(接口是程序功能所必需的(使用依赖项注入)) 不幸的是,这两个类也是必需的,因为email sender类将在其他程序中重复使用 我找到了一个几乎适合我的问题的解决方案,它是: 我的区别在于,我的两个类中的每一个都应该只调用一个方法 以下是我的代码(已经尝试在前面的解决方案中实现泛型): 接

我在c#中工作,试图实现两个使用相同接口的类。 两个类各自只需要一个方法。 然而,这两种方法需要具有不同的类型,采用不同的参数。 我真的希望能够从接口继承一个方法,并在每个类中覆盖它,因为这将是很好和整洁的(接口是程序功能所必需的(使用依赖项注入)) 不幸的是,这两个类也是必需的,因为email sender类将在其他程序中重复使用

我找到了一个几乎适合我的问题的解决方案,它是:

我的区别在于,我的两个类中的每一个都应该只调用一个方法

以下是我的代码(已经尝试在前面的解决方案中实现泛型):

接口IEmailSender
{
不发送邮件();
}
公共类电子邮件生成器:IEmailSender
{
public override MailMessage DoEmail(字符串emailAddress)
{
MailMessage=新的MailMessage();
//生成电子邮件的代码
返回消息;
}
}
公共类EmailSender:IEmailSender
{
公共覆盖bool DoEmail(MailMessage)
{
//发送电子邮件的代码
返回true;
}
}
理想情况下,我希望我的email sender方法为void,但如果必须有返回值,我不介意它返回布尔值

希望这是有意义的,我只是想在这里保持整洁,因为目前为了让它工作,我需要在我的接口中有两个方法,并且让每个类调用一个空方法


提前感谢,

看起来您正因为糟糕的体系结构而苦苦挣扎
EmailGenerator
不是
IEmailSender
。当您将它用作
iemailssender
时,没有任何情况

我建议:

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

你能解释一下为什么这两个类应该“共享”同一个接口吗?他们似乎没有做类似的事情,是吗?我原本想要一个“电子邮件”接口来处理处理电子邮件的两个类。如果没有办法,那我就把它们分开。好的,非常感谢。我原以为可能不可能将两者都放在一个界面中!我来看看情况如何。
class Consumer{
    private IEmailSender _emailSender;

    Consumer(IEmailSender emailSender){ _emailSender = emailSender;}

    void Method()
    {
        string msg = "Hello Wolrd!"
        _emailSender.SendEmail(msg);
    }
}