如何定义实现接口并约束类型参数的泛型类?

发布于 2024-11-13 11:16:44 字数 408 浏览 3 评论 0原文

class Sample<T> : IDisposable // case A
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

class SampleB<T> where T : IDisposable // case B
{
}

class SampleC<T> : IDisposable, T : IDisposable // case C
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

情况C是情况A和情况B的组合,这可能吗? 如何使情况C正确?

class Sample<T> : IDisposable // case A
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

class SampleB<T> where T : IDisposable // case B
{
}

class SampleC<T> : IDisposable, T : IDisposable // case C
{
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

Case C is the combination of case A and case B. Is that possible?
How to make case C right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

好多鱼好多余 2024-11-20 11:16:44

首先是实现的接口,然后是由 where 分隔的通用类型约束:

class SampleC<T> : IDisposable where T : IDisposable // case C
{        //                      ↑
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}

First the implemented interfaces, then the generic type constraints separated by where:

class SampleC<T> : IDisposable where T : IDisposable // case C
{        //                      ↑
    public void Dispose()
    {
        throw new NotImplementedException();
    }
}
指尖凝香 2024-11-20 11:16:44
class SampleC<T> : IDisposable where T : IDisposable // case C
{    
    public void Dispose()    
    {        
        throw new NotImplementedException();    
    }
}
class SampleC<T> : IDisposable where T : IDisposable // case C
{    
    public void Dispose()    
    {        
        throw new NotImplementedException();    
    }
}
亣腦蒛氧 2024-11-20 11:16:44

你可以这样做:

public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass

You can do it like this:

public class CommonModel<T> : BaseModel<T>, IMessage where T : ModelClass
卷耳 2024-11-20 11:16:44
class SampleC<T> : IDisposable where T : IDisposable
{
...
}
class SampleC<T> : IDisposable where T : IDisposable
{
...
}
万劫不复 2024-11-20 11:16:44

关键是要把“哪里……”放在最后

public class BaseRepository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : class 
{
 // enter code here
}

the thing is to keep 'where ...' at the end

public class BaseRepository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : class 
{
 // enter code here
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文