【问题标题】:Implement Interface through class member通过类成员实现接口
【发布时间】:2023-02-15 21:32:36
【问题描述】:

是否可以在 C# 中通过类成员实现接口而不显式返回成员实现? 我想要这样的东西

interface IAttachement
{
    byte[] Data { get; }
    string Name { get; }
    long Size { get; }
}

class Attachement : IAttachement
{
    public byte[] Data { get; set; }
    public string Name { get; set; }
    public long Size { get; set; }
}

class Request : IAttachement
{
    public Attachement Attachement { get; set; } : IAttachement
}

代替

class Request : IAttachement
{
    public Attachement Attachement { get; set; }
    public byte[] Data => Attachement.Data;
    public string Name => Attachement.Name;
    public long Size => Attachement.Size;
}

【问题讨论】:

  • 哈哈,这基本上就是 by 在 Kotlin 中所做的。不幸的是,我认为 C# 没有类似的功能。 :(
  • 太棒了,现在我至少知道它叫做委托模式,而且我的想法离我不远了!

标签: c# .net-6.0


【解决方案1】:

不,这不是 C# 提供的功能。

您可以将接口实现委托给字段/属性/成员,但您必须明确地执行此操作,如您的示例所示。

如果您希望将此功能添加到语言中,可以提出问题here

【讨论】:

    【解决方案2】:

    如果不显式返回成员的实现,则不可能通过类成员实现接口。为了让一个类实现一个接口,它必须为接口的所有成员提供一个实现,无论是显式的还是隐式的。在您的示例中,Request 类需要为 IAttachment 接口的 DataNameSize 属性提供实现,方法是直接实现它们或委托给 Attachement 成员。

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多