具有 IDisposable 的接口继承

本文关键字:继承 接口 IDisposable 具有 | 更新日期: 2023-09-27 18:34:54

我有以下继承层次结构:

public interface IRepository<T> : IDisposable
{
    void Add(T model);
    void Update(T model);
    int GetCount();
    T GetById(int id);
    ICollection<T> GetAll();
}
public interface IAddressRepository : IRepository<Address>
{
}

而这段代码:

var adrs = new Address[]{
    new Address{Name="Office"}
};
using (IAddressRepository adrr = new AddressRepository())
    foreach (var a in adrs)
        adrr.Add(a);

但是,此代码无法编译。它给了我这个错误消息:

Error   43  
'Interfaces.IAddressRepository': type used in a using statement must be
 implicitly convertible to 'System.IDisposable'

但是,IAddressRepository的父级继承自IDisposable .

这是怎么回事?如何使代码编译?

具有 IDisposable 的接口继承

我的猜测是你犯了一个错误 - 要么你没有重新编译包含IRepository<T>接口的程序集,因为你让它继承自IDisposable,或者你引用了它的错误副本,或者你引用了其他一些IAddressRepository

尝试执行"清理",然后"全部重建",并检查引用上的路径。 如果项目位于同一解决方案中,请确保引用的项目包含 IRepository<T>/IAddressRepository而不是 DLL。

还要确保AddressRepository实际实现IAddressRepository。 它可能只是报告了错误的错误。

编辑:所以解决方案似乎是包含AddressRepository父类的程序集没有编译。 这导致调试器抱怨AddressRepository没有实现IDisposable,而不是(更明智的("由于其保护级别而无法访问"错误编译类本身。 我的猜测是你也有这个错误,但首先解决了这个问题。

对我有用:

using System;
public class Address {}
public interface IRepository<T> : IDisposable
{
    void Add(T model);
    void Update(T model);
}
public interface IAddressRepository : IRepository<Address>
{
}
class Program
{
    public static void Main()
    {
        using (var repo = GetRepository())
        {
        }
    }
    private static IAddressRepository GetRepository()
    {
        // TODO: Implement :)
        return null;
    }
}

我怀疑您可能有两个IAddressRepository接口。你确定是Interfaces.IAddressRepository扩展了IRepository<T>,并且扩展了IDisposable