[英]Inheriting an interface from a base abstract class and IDisposable's correct place
[英]Are there any issue inheriting from an abstract class and interface where the abstract inherits from base interface
從抽象類和接口繼承的問題是否存在,其中抽象從基本接口繼承。 下面的示例僅是為了說明概念而進行了精簡。 我這樣做是為了創建一個基於IFooRepository的偽類,並且FooRepository可以重用我的抽象類中的所有代碼(這些代碼將由許多其他類共享):
public interface IMyRepository<T> where T : class
{
List<T> GetEntity();
}
public abstract class MyRepository<T> : IMyRepository<T> where T : class
{
protected readonly string _connectionString;
public virtual T CommonFunction(int Id)
{
//do my common code here
}
public List<T> GetEntity()
{
}
}
public interface IFooRepository : IMyRepository<Foo>
{
void UpdateFoo(int id, string foo);
}
public class FooRepository : MyRepository<Foo>, IFooRepository
{
public void UpdateFoo(int id, string foo)
{
throw new NotImplementedException();
}
}
public class FakeFooRepository : IFooRepository
{
public List<Foo> GetEntity()
{
throw new NotImplementedException();
}
public void UpdateFoo(int id, string foo)
{
throw new NotImplementedException();
}
}
public interface IBarRepository : IMyRepository<Bar>
{
void DoSomethingElse(int id);
}
public class BarRepository : MyRepository<Bar>, IBarRepository
{
public void DoSomethingElse(int id)
{
}
}
如果IFooRepository不繼承自IMyRepository,而是包含所有像這樣的成員,那就更好了:
public interface IFooRepository
{
void UpdateFoo(int id, string foo);
List<Foo> GetEntity();
}
無論哪種方式,整個過程都可以按我預期的方式編譯和運行,只是想知道由於接口重疊而引起的問題。
謝謝
您無需在具體類中實現接口,如果您的基類實現了某些接口,則其所有子級將自動成為該接口的實現者
您的第一個示例看起來非常合理。 IFooRepository繼承自IMyRepository,因為該接口本質上是類型為Foo的IMyRepository。 出於同樣的原因,您的第二個樣本(其中IFooRepository不繼承自IMyRepository)肯定似乎破壞了您嘗試建立的關系。 聽起來這不是一個好計划。
通常,您可能會考慮這樣做的另一種方法是使Foo和Bar(和T)都具有相同的類型(IRepositable或其他類型),並且特定於Foo或Bar的行為在其IRepositable的單獨實現中表示。 如果可以通過保持Foo和Bar正確封裝的方式來完成此操作,那么您將得到一個非常優雅的解決方案。
如果Foo需要執行UpdateFoo和Bar,類似地,需要使用相同的方法簽名來執行UpdateBar,以此類推,對於其他任何IRepositable來說都是如此。 但是在您的情況下,方法名稱DoSomethingElse似乎表明IBarRepository正在實現與UpdateFoo方法完全不同的行為。 如果是這樣,那么您是正確的。 從特定類型的IMyRepository繼承的接口可能是最好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.