从Idisposable实现泛型类时,编译时的行为不同?
作者:互联网
为什么在遵循以下代码的情况下行为发生变化
public class Repository<T> : IRepository<T> where T : BaseEntity, IDisposable
和
public class Repository<T> : IDisposable, IRepository<T> where T : BaseEntity
如果我将实现类留空,则在上述情况下,我不希望我实现Dispose()方法.但是,在下面需要实现Dispose()方法.
下面是完整的测试代码,如下所示:
public interface Itest<T> where T: testA{ }
public class testA { }
public class test2<T> : Itest<T> where T : testA,IDisposable{ } //successfully compiled
public class test3<T> : IDisposable, Itest<T> where T : testA { }//Failed compiled : need to implement Dispose()
解决方法:
当你有
public class Repository<T> : IRepository<T> where T : BaseEntity, IDisposable
然后,T必须实现IDisposable.
当你有
public class Repository<T> : IDisposable, IRepository<T> where T : BaseEntity
然后,存储库必须实现IDisposable.
当您想要创建test2< T>的实例时,您应该提供一个从testA派生并实现IDisposable的通用参数.
标签:generics,idisposable,c,net 来源: https://codeday.me/bug/20191026/1933430.html