继承接口并自动实现属性

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

我有一个情况,我应该从一个接口继承一个类,该接口将自动实现,而无需在父类中键入实现,这可能吗?

例如:

public interface IBaseClass
{
    Guid? ID{get;set;}
}

public class BaseClass:IBaseClass
{
    public Guid? ID{get;set;}
}

public class ProductObject:IBaseClass
{
}

那么,

ProductObject
是否会自动包含 ID 属性(无需在类中键入 ID 实现)?

c# inheritance interface
3个回答
0
投票

BaseClass你也不需要声明: 公共指导? ID{获取;设置}。因为它会从父类中执行。 至于ProductObject类,尝试创建一个新的ProductObject实例,你就会清楚地看到。 ProductObject 包含 ID


0
投票

有一种方法可以使用 Roslyn Source Generator 来实现。它能够分析您的代码,例如您可以添加一个属性以在分析器中搜索,并且生成器可以生成具有接口定义的属性的类的部分类。如果您设置正确,生成器会更新文件。

因此,在实现生成器之后,该类应该实现您定义的属性并成为分部类。所以你不需要手动实现这些属性。

https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview


0
投票

不可以,如果没有在派生类中显式声明属性,则无法从声明某些属性的接口派生。
在您的情况下,您将收到类似于以下内容的错误:

错误CS0535:“ProductObject”未实现接口成员 'IBaseClass.ID'

您有 2 个有效选项:

  1. ProductObject
    (类)而不是
    BaseClass
    (接口)派生
    IBaseClass

    public class ProductObject : BaseClass
    {
    }
    

    从类派生将使属性成为

    ProductObject
    的一部分。

  2. ProductObject
    中声明属性:

    public class ProductObject : IBaseClass
    {
        public Guid? ID { get; set; }
    }
    

备注:

  1. C# 8 引入了默认接口方法,但这些不适用于属性。
  2. 您可以使用一些自动重构工具来在派生类中生成属性,但代码最终必须在那里。
© www.soinside.com 2019 - 2024. All rights reserved.