C# 记录并实现可空接口

问题描述 投票:0回答:1

我有以下界面:

public interface IEmailModel
{
    EmailAddressDto? Receiver { get; set; }
}

现在我想实施它以备记录。试试这个:

public record EmailModelSendConfirmationToUserAndSuperadmin(EmailAddressDto? Receiver = null) : IEmailModel;

没问题,没有错误

试试这个:

public record EmailModelSendConfirmationEmailCodeToUser(string link, EmailAddressDto? Receiver = null) : IEmailModel;

我明白了

“EmailModelSendConfirmationEmailCodeToUser”未实现 接口成员“IEmailModel.Receiver.set”。 “EmailModelSendConfirmationEmailCodeToUser.Receiver.init”不能 实施“IEmailModel.Receiver.set”。

我真的不明白为什么要实现

set
如果参数可以为空,但是没关系

我将界面更改为:

public interface IEmailModel
{
    EmailAddressDto? Receiver { get; init; }
}

EmailModelSendConfirmationEmailCodeToUser
没有错误,但类
EmailModelSendConfirmationToUserAndSuperadmin
有:

“EmailModelSendConfirmationToUserAndSuperadmin”未实现 接口成员“IEmailModel.Receiver.init”。 “EmailModelSendConfirmationToUserAndSuperadmin.Receiver.set”不能 实现“IEmailModel.Receiver.init”。

为什么要这样以及如何实现这个记录接口?

c# record interface-implementation
1个回答
0
投票

删除

set
或将其更改为
init
:

public interface IEmailModel
{
    EmailAddressDto? Receiver { get; init; }
}

或者使用“简单”属性:

public record EmailModelSendConfirmationToUserAndSuperadmin() : IEmailModel
{
    public EmailAddressDto? Receiver { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.