C# 具有共享某些属性的对象的模型的接口与抽象类

C# 具有共享某些属性的对象的模型的接口与抽象类,c#,.net,oop,interface,abstract-class,C#,.net,Oop,Interface,Abstract Class,我的应用程序主要由活动组成。它们是我模型的主要对象。 我有两种类型的活动: 临时的:立即运行一次的活动 计划的:计划未来的活动,可以根据其计划运行多次 这两者之间存在共享属性,并且存在各自特定的属性。设计此数据模型的最佳方法是什么接口或抽象类 假设两种类型的活动都可以有Id和名称,并且: 只有临时活动才具有名为收件人的数据表 只有计划的活动才有名为Schedule的列表 如果你不投我的反对票或要求结束这个问题,请提供您推荐的模型的基本结构,包括访问修饰符和抽象/虚拟或其他关键字,以帮助我为我

我的应用程序主要由活动组成。它们是我模型的主要对象。 我有两种类型的活动:

  • 临时的:立即运行一次的活动
  • 计划的:计划未来的活动,可以根据其计划运行多次
  • 这两者之间存在共享属性,并且存在各自特定的属性。设计此数据模型的最佳方法是什么<代码>接口或
    抽象类

    假设两种类型的活动都可以有Id和名称,并且:

    • 只有临时活动才具有名为收件人的数据表
    • 只有计划的活动才有名为Schedule的
      列表

    如果你不投我的反对票或要求结束这个问题,请提供您推荐的模型的基本结构,包括
    访问修饰符
    抽象/虚拟
    或其他关键字,以帮助我为我的模型提供更好的结构。

    如果不很好地理解您正在做的事情,很难回答此问题,不幸这是一个非常令人遗憾的观点基于

    但是,在一个非常简单的级别上,如果您使用接口,您将经常需要在实现属性(方法、属性等)之间复制代码。基类为它们提供此功能。出于这个原因,我经常使用基类,除非有特定的原因说明接口更合适

    我认为不同类型的活动本质上都是活动,因此有一个基本类。然而,他们将针对不同的实体(个人、慈善机构、公司),这些实体都需要一种联系方式(电子邮件/电话/地址)。我建议,这些不相关的实体(除了他们可能成为活动的目标之外)是更好的使用界面的例子


    但是,您需要考虑哪些方法可以替代,哪些是更干净的解决方案。

    如果您对自己正在做的事情没有很好的理解,这很难回答,不幸的是,这是基于观点的

    但是,在一个非常简单的级别上,如果您使用接口,您将经常需要在实现属性(方法、属性等)之间复制代码。基类为它们提供此功能。出于这个原因,我经常使用基类,除非有特定的原因说明接口更合适

    我认为不同类型的活动本质上都是活动,因此有一个基本类。然而,他们将针对不同的实体(个人、慈善机构、公司),这些实体都需要一种联系方式(电子邮件/电话/地址)。我建议,这些不相关的实体(除了他们可能成为活动的目标之外)是更好的使用界面的例子


    但是,您需要考虑哪些方法可以替代,哪些是更干净的解决方案。

    如果您对自己正在做的事情没有很好的理解,这很难回答,不幸的是,这是基于观点的

    但是,在一个非常简单的级别上,如果您使用接口,您将经常需要在实现属性(方法、属性等)之间复制代码。基类为它们提供此功能。出于这个原因,我经常使用基类,除非有特定的原因说明接口更合适

    我认为不同类型的活动本质上都是活动,因此有一个基本类。然而,他们将针对不同的实体(个人、慈善机构、公司),这些实体都需要一种联系方式(电子邮件/电话/地址)。我建议,这些不相关的实体(除了他们可能成为活动的目标之外)是更好的使用界面的例子


    但是,您需要考虑哪些方法可以替代,哪些是更干净的解决方案。

    如果您对自己正在做的事情没有很好的理解,这很难回答,不幸的是,这是基于观点的

    但是,在一个非常简单的级别上,如果您使用接口,您将经常需要在实现属性(方法、属性等)之间复制代码。基类为它们提供此功能。出于这个原因,我经常使用基类,除非有特定的原因说明接口更合适

    我认为不同类型的活动本质上都是活动,因此有一个基本类。然而,他们将针对不同的实体(个人、慈善机构、公司),这些实体都需要一种联系方式(电子邮件/电话/地址)。我建议,这些不相关的实体(除了他们可能成为活动的目标之外)是更好的使用界面的例子


    但是,您需要考虑覆盖哪些方法,以及哪些方法是更干净的解决方案。

    一般来说,如果它们共享公共行为(代码),那么这些代码应该存在于抽象类中。如果它们执行相同的角色,则将它们放在接口后面

    在您的例子中,您似乎有两个共享属性,都是一个简单的值,它并没有真正定义行为,所以基于这些属性,我只选择一个接口

    如果您确实决定创建一个抽象类(可能两种类型都希望共享一些代码),那么仍然可以保留接口。有朝一日,您可能会有第三种活动类型,它不与其他活动类型共享行为(因此不实现相同的抽象类),但执行相同的角色(因此实现相同的接口)

    对于抽象类中的访问修饰符,如果两个类只共享两个属性,则只需在抽象类中定义它们,而不使用
    abstract
    virtual
    关键字

    一般