0

我对.NET比较陌生,并且偶然发现了这个特定问题:在遵循有关存储库模式的教程时,该类的定义如下所示:

public class GenericRepository<TEntity> where TEntity : class { ...

话虽如此,这个类应该实现一个接口。由于我已经使用了:运算符,我该怎么做?

我试着去public class GenericRepository<TEntity> : IGenericRepository where TEntity : class {public class GenericRepository<TEntity> where TEntity : class : IGenericRepository {但它也不起作用

4

4 回答 4

4

由于我已经使用了 : 运算符,我该怎么做?

:不是运算符 - 您只是在泛型类型约束中使用它。您仍然可以指定要实现的接口。

这应该没问题:

public class GenericRepository<TEntity> : IGenericRepository where TEntity : class

或者,如果IGenericRepository是通用接口,您可能需要:

public class GenericRepository<TEntity> : IGenericRepository<TEntity>
    where TEntity : class
于 2015-02-05T21:55:09.623 回答
0

使用逗号添加多个通用约束:

public class GenericRepository<TEntity> where TEntity : class, IGenericRepository {}
于 2015-02-05T21:55:31.973 回答
0

你会说 public class GenericRepository<TEntity> : BaseClass1, IInterface1, IInterface2, ... where TEntity : class { ...

您使用的:泛型类型参数需要是 a class(而不是 a struct),因此您可以添加一个额外的“ :”。

于 2015-02-05T21:56:21.120 回答
0
public class GenericRepository<TEntity> : **IGenericRepository**<TEntity> where TEntity : class

或者

在我的情况下,所有类都继承自 IdentityBaseClass 因此我的签名看起来像:

public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : IdentityBase

话虽如此,这意味着我的类,谁想要使用 GenericRepository,必须从 IdentityBase 类继承。

我的 IdentityBase 类有两个属性。

 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;
        }
于 2015-02-05T21:59:49.643 回答