C# 我应该为抽象类创建接口吗?

C# 我应该为抽象类创建接口吗?,c#,entity-framework,code-first,C#,Entity Framework,Code First,是否有实际的理由为抽象类创建接口?我遇到这样的事情: public interface IEntity<T> { T Id { get; set; } } public abstract class BaseEntity { } public abstract class Entity<T> : BaseEntity, IEntity<T> { public virtual T Id { get; set; } } 公共接口的可扩展

是否有实际的理由为抽象类创建接口?我遇到这样的事情:

public interface IEntity<T> 
{
    T Id { get; set; }
}

public abstract class BaseEntity { 
}

public abstract class Entity<T> : BaseEntity, IEntity<T> 
{
    public virtual T Id { get; set; }
}
公共接口的可扩展性
{
T Id{get;set;}
}
公共抽象类BaseEntity{
}
公共抽象类实体:BaseEntity、Entity
{
公共虚拟T Id{get;set;}
}
我真的不明白这段代码和这段代码之间有什么区别,因为我不能多次使用这种功能:

public abstract class BaseEntity { 
}

public abstract class Entity<T> : BaseEntity
{
    public virtual T Id { get; set; }
}
公共抽象类BaseEntity{
}
公共抽象类实体:BaseEntity
{
公共虚拟T Id{get;set;}
}

谢谢

因为
BaseEntity
类实际上添加了方法的任何属性,是的,它与接口完全不同。接口定义了类型为
T
的属性
Id
,该接口(合同)可用于应用程序中的其他位置

现在的基类在IMHO中是无用的

为您实现接口的基类是可用的,如下所示:

public interface IEntity<T> {
    T Id { get; set; }
}

public abstract class BaseEntity<T>: IEntity<T> { 
    public virtual T Id { get; set; }
}

public abstract class Entity<T> : BaseEntity<T> {
    // No need to implement the Id property, we already have it inherited
}
公共接口的可扩展性{
T Id{get;set;}
}
公共抽象类BaseEntity:IEntity{
公共虚拟T Id{get;set;}
}
公共抽象类实体:BaseEntity{
//不需要实现Id属性,我们已经继承了它
}

因为
BaseEntity
类实际上添加了方法的任何属性,是的,它与接口完全不同。接口定义了类型为
T
的属性
Id
,该接口(合同)可用于应用程序中的其他位置

现在的基类在IMHO中是无用的

为您实现接口的基类是可用的,如下所示:

public interface IEntity<T> {
    T Id { get; set; }
}

public abstract class BaseEntity<T>: IEntity<T> { 
    public virtual T Id { get; set; }
}

public abstract class Entity<T> : BaseEntity<T> {
    // No need to implement the Id property, we already have it inherited
}
公共接口的可扩展性{
T Id{get;set;}
}
公共抽象类BaseEntity:IEntity{
公共虚拟T Id{get;set;}
}
公共抽象类实体:BaseEntity{
//不需要实现Id属性,我们已经继承了它
}

以下是我想知道的正确答案:


谢谢大家的帮助。

以下是我想知道的正确答案:


谢谢大家的帮助。

你想完成什么?你的目标是什么?为什么你开始这样做来解决你的问题?如果不知道您要解决的问题是什么,就不可能说出什么是好主意,什么不是。尝试搜索。Microsoft提供的一些指导:kai,我想描述数据库实体的结构。我认为最好使用通用属性实现BaseEntity类并从中继承其他类。@AlexeyKoptyaev建议的基类将包含通用属性或方法这一事实对于其存在的原因至关重要,这是你应该在问题中提到的。你想实现什么?你的目标是什么?为什么你开始这样做来解决你的问题?如果不知道您要解决的问题是什么,就不可能说出什么是好主意,什么不是。尝试搜索。Microsoft提供的一些指导:kai,我想描述数据库实体的结构。我认为用一般属性实现BaseEntity类并从中继承其他类会很好。@AlexeyKoptyaev建议的基类将包含一般属性或方法这一事实对于其存在的原因是至关重要的,这是您应该在问题中提到的。