C# C语言中的DAL接口#

C# C语言中的DAL接口#,c#,interface,C#,Interface,我有一个应用程序,其中每个表都需要以下方法:SelectAll、SelectSingle、SetStatus、Save 如何在DAL中为此设置接口?我一定要使用泛型吗 澄清: 我想知道如何创建一个适用于dal中每个类的接口,或者是否可以不使用泛型列表类型 示例接口,但您必须为接口中的方法声明返回类型: public interface IBaseDB { public SelectAll(); public SelectOne(int id); public void Save(ob

我有一个应用程序,其中每个表都需要以下方法:SelectAll、SelectSingle、SetStatus、Save

如何在DAL中为此设置接口?我一定要使用泛型吗

澄清:

我想知道如何创建一个适用于dal中每个类的接口,或者是否可以不使用泛型列表类型

示例接口,但您必须为接口中的方法声明返回类型:

public interface IBaseDB {
  public SelectAll();
  public SelectOne(int id);
  public void Save(object);
}
实现接口的示例DAL类

public class UserDB : IBaseDB {
  public UserCollection SelectAll() { }
  public User SelectOne(int id) { }
  public void Save(User user) { }
}

一句话:我想为DAL中的每个类提供一个所需方法的列表,但是DAL中的每个类对于SelectAll和SelectOne都有不同的返回类型。我还不知道如何做到这一点。

我建议使用泛型,没有太多理由反对这种选择。 如果没有泛型,您将不得不强制转换实例或通过在接口中要求
object
实例来放松类型检查。 为了更好地理解您正在做什么,请阅读.net泛型的协变和逆变。 此外,如果可能的话,完全放弃这种设计(数据访问层、业务逻辑层、应用程序和表示层),转而使用LinQ和存储库

一些建议:


您可以使用扩展方法这是一个非常广泛的问题。就我个人而言,我经常使用一个(或一系列)抽象基,它有Get(intid)、Get(stringuq)等等。我覆盖特定实体的这些属性,以提供非标准方法GetAllUsersLoggedInWithinXDays(int days);这看起来像是项目开发需求,而不是一个问题:请缩小您的问题范围。你为什么不想使用泛型呢?在这种情况下,泛型将是完美的。您正在尝试使用DI概念吗?我试图理解您在这里使用接口的目标?您是对的。我想我不想使用泛型,因为我不知道如何使用。花了一些时间,但现在我明白了。我能够建立一个界面,它有我需要的方法,而且一切看起来都很好。至少,它是编译的。