C# 为类型参数设置默认值

C# set a default for a type parameter

我正在尝试扩展一个 class,我可以选择在其中传递一个类型。然而,很多时候这将是 int 类型,尽管在某些情况下这可能会改变,所以我想让它成为动态的。

但是,我想让它默认为整数类型,并且由于它扩展了另一个需要该类型的 class,我不确定如何处理它。

我有一个 BaseEntity 设置,以便在创建/更新记录时允许填充 CreatedAt 和 UpdatedAt 列,这扩展了可识别 class 从 JSON API包。

class BaseEntity : Identifiable {
    ...
}

Identifiable class,如果 id 的类型与指定的原始类型不同,则可选地允许您将类型参数传递给扩展。

class BaseEntity : Identifiable<Guid> {
    ...
}

我想知道,我如何扩展这个 BaseEntity class 并有选择地提供一个类型并将其传递给 Identifiable。这是可以实现的还是我每次都需要提供它。

class BaseEntity<T> : Identifiable<T> {
  // <T> Should default to int if possible.
}
class AnotherEntity : BaseEntity<Guid> {
  // Allow me to pass in GUID to override the default int type
}
class AnotherEntityAgain : BaseEntity {
  // Would default to type <int> if nothing specified.
}

在 C# 中没有“可选类型”这样的东西,这是通过有两个 classes 来实现的,一个有类型,一个没有。 C# 允许您同时拥有两者,因为 ClassName 被认为是与 ClassName<T>

不同的类型

您可以通过创建一个无类型 class 来实现同样的效果:

class BaseEntity : Identifiable<int> {
  
}

您还可以让 class 直接从您的泛型 class 继承,这样您就不需要重复代码:

class BaseEntity : BaseEntity<int> {
  
}