【发布时间】:2021-11-27 11:32:14
【问题描述】:
我最近发现的 C# 接口可以声明属性。假设我有几个课程Company、Project 和User。对于这些类,公共变量是Id 和Name。
我应该在接口中声明这些变量(如代码块 #1 所示),还是将它们添加到基类 (BaseClass) 并将它们继承给这些对象(代码块 #2)?
我正在开发一个 Blazor 应用程序,我不知道这是 C# 中的标准。
代码块 #1:
public interface IBase
{
Guid ID { get; }
String Name { get; set; }
}
public class Company : IBaseEntity
{
public Guid Id { get; set; }
public String Name { get; set; }
public Company()
{
this.Id = Guid.NewGuid();
this.CreatedAt = DateTime.Now;
}
}
代码块 #2:
public class BaseClass
{
Guid ID { get; }
String Name { get; set; }
}
public class Company: BaseClass
{
public Company()
{
this.Id = Guid.NewGuid();
this.CreatedAt = DateTime.Now;
}
}
【问题讨论】:
-
使用接口,您必须在实现接口的类中实现优先级。但是使用基类,您可以覆盖或使用基类属性。所以这不是关于标准,而是关于要求
-
假设你以后还需要一个
class WorkOrder。它也有名字吗?名称和 ID 不在同一级别。 -
这真的有点关于你想用这些类做什么。如果我想添加一些额外的功能,比如不依赖于实现的常用方法,我通常更喜欢基类。如果它只是关于真正依赖于子类的属性和方法,那么它本身真的每次都需要一个覆盖,我更喜欢接口。但通常在大多数情况下,您可以同时使用两者