我有一个情况,我应该从一个接口继承一个类,该接口将自动实现,而无需在父类中键入实现,这可能吗?
例如:
public interface IBaseClass
{
Guid? ID{get;set;}
}
public class BaseClass:IBaseClass
{
public Guid? ID{get;set;}
}
public class ProductObject:IBaseClass
{
}
那么,
ProductObject
是否会自动包含 ID 属性(无需在类中键入 ID 实现)?
BaseClass你也不需要声明: 公共指导? ID{获取;设置}。因为它会从父类中执行。 至于ProductObject类,尝试创建一个新的ProductObject实例,你就会清楚地看到。 ProductObject 包含 ID
有一种方法可以使用 Roslyn Source Generator 来实现。它能够分析您的代码,例如您可以添加一个属性以在分析器中搜索,并且生成器可以生成具有接口定义的属性的类的部分类。如果您设置正确,生成器会更新文件。
因此,在实现生成器之后,该类应该实现您定义的属性并成为分部类。所以你不需要手动实现这些属性。
https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/source-generators-overview
不可以,如果没有在派生类中显式声明属性,则无法从声明某些属性的接口派生。
在您的情况下,您将收到类似于以下内容的错误:
错误CS0535:“ProductObject”未实现接口成员 'IBaseClass.ID'
您有 2 个有效选项:
从
ProductObject
(类)而不是 BaseClass
(接口)派生 IBaseClass
:
public class ProductObject : BaseClass
{
}
从类派生将使属性成为
ProductObject
的一部分。
在
ProductObject
中声明属性:
public class ProductObject : IBaseClass
{
public Guid? ID { get; set; }
}
备注: