首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型接口作为类属性(或类构造函数中的属性)

泛型接口作为类属性(或类构造函数中的属性)
EN

Stack Overflow用户
提问于 2014-11-20 12:25:29
回答 2查看 81关注 0票数 0

我有一个现有的通用接口如下:

代码语言:javascript
复制
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new()
{
   ...    

问题是,我希望将这个通用接口作为另一个名为WorkflowService的类的属性,或者作为WorkflowService类构造函数中的属性。当我像在编译器下面的构造器示例中那样做时,我相信我在T位上遇到了问题(尽管我可能错了)。

例如WorkflowService构造器

代码语言:javascript
复制
public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator<T> workflowValidator) where T: IPersistent, IStateful
    {
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-20 12:31:42

如果要在接受为构造函数参数的IWorkflowValidator<T>上设置泛型约束,则必须将类本身设置为泛型,并将约束添加到类的泛型类型参数中,如下所示:

代码语言:javascript
复制
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new()
{
}

public class WorkflowService<T> where T : IPersistent, IStateful, new()
{
    private readonly IWorkflowValidator<T> _validator;

    public WorkflowService(IWorkflowValidator<T> validator)
    {
        _validator = validator;
    }

    public IWorkflowValidator<T> Validator
    {
        get { return _validator; }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2014-11-20 12:31:38

如果要将泛型接口传递给类,则必须向类中添加泛型参数。

代码语言:javascript
复制
public interface IWorkflowValidator<T> where T : IPersistent, IStateful, new() { }

public class WorkflowService<T> where T: IPersistent, IStateful, new()
{
    public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator<T> workflowValidator)
    { }
}

或者,您可以创建非泛型版本的接口(泛型版本的基础),并在创建实现接口泛型版本的类实例时指定类型。

代码语言:javascript
复制
public interface IWorkflowValidator { }

public interface IWorkflowValidator<T> : IWorkflowValidator
    where T : IPersistent, IStateful, new() { }

public class WorkflowService
{
    public WorkflowService(ControllerAccess controllerAccess, IValidationDictionary validatonDictionary, IWorkflowValidator workflowValidator) { }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27039601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档