C# 在 "where TEntity : class" 上实现接口
C# implement interface on "where TEntity : class"
我是 .NET 的新手,我偶然发现了这个特殊问题:在遵循存储库模式教程时,class 的定义是这样的:
public class GenericRepository<TEntity> where TEntity : class { ...
也就是说,这个 class 应该实现一个接口。由于我已经使用了 :
运算符,我该怎么做?
我试过 public class GenericRepository<TEntity> : IGenericRepository where TEntity : class {
和 public class GenericRepository<TEntity> where TEntity : class : IGenericRepository {
但没用
Since I already used the : operator, how do I do that?
:
不是运算符 - 您只是在泛型类型约束中使用它。您仍然可以指定一个接口来实现。
这应该没问题:
public class GenericRepository<TEntity> : IGenericRepository where TEntity : class
或者如果 IGenericRepository
是通用接口,您可能需要:
public class GenericRepository<TEntity> : IGenericRepository<TEntity>
where TEntity : class
使用逗号添加多个通用约束:
public class GenericRepository<TEntity> where TEntity : class, IGenericRepository {}
你会说
public class GenericRepository<TEntity> : BaseClass1, IInterface1, IInterface2, ... where TEntity : class { ...
你用的:
指的是泛型类型参数需要是class
(而不是struct
),所以你可以多加一个“:
".
public class GenericRepository<TEntity> : **IGenericRepository**<TEntity> where TEntity : class
或
在我的例子中,所有 classes 都继承自 IdentityBaseClass 因此我的签名看起来像:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : IdentityBase
说了我的classes的意思,谁要用GenericRepository,必须继承IdentityBase class.
我的 IdentityBase class 有两个属性。
public class IdentityBase
{
/// <summary>
/// Gets or sets ID.
/// </summary>
[NonNegative]
[DataMember(IsRequired = true)]
public int ID
{
get;
set;
}
/// <summary>
/// Gets or sets the unique identifier of a row; this is to do with replication in SQL.
/// </summary>
public Guid UniqueIdentifier
{
get;
set;
}
我是 .NET 的新手,我偶然发现了这个特殊问题:在遵循存储库模式教程时,class 的定义是这样的:
public class GenericRepository<TEntity> where TEntity : class { ...
也就是说,这个 class 应该实现一个接口。由于我已经使用了 :
运算符,我该怎么做?
我试过 public class GenericRepository<TEntity> : IGenericRepository where TEntity : class {
和 public class GenericRepository<TEntity> where TEntity : class : IGenericRepository {
但没用
Since I already used the : operator, how do I do that?
:
不是运算符 - 您只是在泛型类型约束中使用它。您仍然可以指定一个接口来实现。
这应该没问题:
public class GenericRepository<TEntity> : IGenericRepository where TEntity : class
或者如果 IGenericRepository
是通用接口,您可能需要:
public class GenericRepository<TEntity> : IGenericRepository<TEntity>
where TEntity : class
使用逗号添加多个通用约束:
public class GenericRepository<TEntity> where TEntity : class, IGenericRepository {}
你会说
public class GenericRepository<TEntity> : BaseClass1, IInterface1, IInterface2, ... where TEntity : class { ...
你用的:
指的是泛型类型参数需要是class
(而不是struct
),所以你可以多加一个“:
".
public class GenericRepository<TEntity> : **IGenericRepository**<TEntity> where TEntity : class
或
在我的例子中,所有 classes 都继承自 IdentityBaseClass 因此我的签名看起来像:
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : IdentityBase
说了我的classes的意思,谁要用GenericRepository,必须继承IdentityBase class.
我的 IdentityBase class 有两个属性。
public class IdentityBase
{
/// <summary>
/// Gets or sets ID.
/// </summary>
[NonNegative]
[DataMember(IsRequired = true)]
public int ID
{
get;
set;
}
/// <summary>
/// Gets or sets the unique identifier of a row; this is to do with replication in SQL.
/// </summary>
public Guid UniqueIdentifier
{
get;
set;
}