我需要在SendAsync
方法的签名中添加一个变量,但是当我尝试这样做时,我得到一个错误,我需要实现接口匹配SendAsync
而没有新变量。
我可以同时拥有两个吗?我想我试图重载接口。
以下代码。
public class EmailService : IIdentityMessageService
{
public async Task SendAsync(IdentityMessage message, string OAEmailAddress)
{
await configSendGridasync(message, OAEmailAddress);
}
}
答案 0 :(得分:1)
界面是合约,您必须完全填写 。特别是客户应该如何知道何时使用两个以及何时只使用一个参数?想象一下,你有一个接口IMyInterface
,其唯一的方法DoSomething
没有任何参数:
IMyInterface instance = getInstance();
instance.DoSomething();
没有一个实现该接口的类:
class MyClass : IMyInterface
{
public void DoSomething(string arg1, string arg2) { ... }
}
您要知道的是,instance
属于IMyInterface
类型DoSomething
- 方法不期望任何。您的界面用户应该如何知道实际类型(在这种情况下为MyClass
)但是需要更多参数来调用该方法?事实上,他甚至不知道getInstance
甚至返回了MyClass
类型的实例,它也可能是实现该接口的任何其他类。
这就是存在接口的原因:他们清楚地说明了你可以用一个实例做什么以及如何做到这一点。超出此范围的一切都需要对该界面进行一些扩展,例如通过在该接口中使用另一种方法,或通过使用第二个接口扩展接口。
答案 1 :(得分:1)
接口是一个规范,意味着任何实现必须至少提供指定的那些功能。您可以自由地实现更多指定的功能。
答案 2 :(得分:1)
此方法存在于接口中,声明(“签名”)必须在类和接口之间匹配,因此只有几个选项:
如果添加方法,则 不会通过接口公开。如果您需要它,并且它对您有意义,您可以将第二种方法添加到同一个接口,或者添加到不同的接口(一个类可以实现多个接口),或者根本不添加任何接口。