2012-06-19 60 views
1
public class SomeRepository<TContext> : IDisposable 
      where TContext : DbContext, new() 
     { 
      protected TContext context; 
      protected SomeRepository() 
      { } 

     public virtual void Create<T>(T item) where T : class, new() 
     { 
      ... 
     } 
    } 

    internal class SomeCrud : SomeRepository<SomeContext> 
    { 
     public override void Create(Product item) 
     { 
      .... 
     }  
    } 

}沒有合適的方法找到重寫通用

我在公共覆蓋無效創建(產品項目)發現override.Please有人看到錯誤了嗎?如果我寫這樣的不適合的方法有錯誤:

 public override void Create<Product>(Product item) 
     { 
      .... 
     } 

我看不到產品類型 感謝

回答

2

我認爲你正在尋找這種解決方案:

public class SomeRepository<TContext, T> where TContext : DbContext where T : class, new() 
{ 
    public virtual void Create(T item) { } 
} 

internal class SomeCrud : SomeRepository<SomeContext, Product> 
{ 
    public override void Create(Product item) { } 
} 

您實際上應該在通用定義中定義產品的約束條件。 注意TSomeRepository<TContext, T>


您可以嘗試

public void Create<T>(T item) where T : Product 
    {   
    } 

但爲什麼那麼使用泛型?

+0

覆蓋和顯式接口實現方法的約束是從基本方法繼承,所以他們不能直接指定 存儲庫中的方法工作良好,但在繼承類中的創建應該是從父母的另一個 – BeginerDummy

+0

我不認爲我完全瞭解你正在努力完成的事情。你不能以你想要的方式改變簽名。 – Aphelion

+0

Aphelion look :)我在基類中有一些虛擬方法,在派生類中有很多時候我不得不改變一些操作。 – BeginerDummy

相關問題