如何在C#中动态指定模型类

时间:2013-07-05 04:37:00

标签: c# interface

嗨,我是C#中的接口和抽象类的新手,我遇到了一个问题,我正在创建一个示例应用程序,我需要将详细信息保存到db中,保存功能对于app只有对象是常见的例如,是不同的。 void Save(User data);void Save(Admin data)我的问题是如何动态指定用户和管理员类

3 个答案:

答案 0 :(得分:1)

使用Generics

public void Save<T>(T data) where T: class
{
    ...
}

这将允许您为任何类型调用Save方法,例如

Admin admin = new Admin();
User user = new User();
dbClass.Save(admin); // T is implicitly inferred by the parameter type
dbClass.Save(user);

对签名的约束,即where T: class,规定只能将类作为参数传递。但是,鉴于string实际上是.NET中特殊类型的类,您可以在技术上调用

dbClass.Save("string")

如果要完全控制类型,可以让类从基类派生或实现特定接口,并将其用作约束,例如。

public class Entity
{
   ...
}

public class Admin : Entity
{
}

public class User : Entity
{
}

然后您将约束更新为where T : Entity,这将确保您只能将实体传递给Save方法。

答案 1 :(得分:0)

我可以看到两个选项:

  1. UserAdmin实现相同的接口(或继承相同的抽象类),类似于IDbEntity。那么你的方法就是:

    public void Save(IDbEntity data)
    
  2. 创建一个保存数据的私有泛型方法,然后创建两个公共包装器,每种类型一个:

    private void Save<T>(T data)
    {
        // your implementation here
    }
    
    public void Save(User data)
    {
        Save<User>(data);
    }
    
    public void Save(Admin data)
    {
        Save<Admin>(data);
    }
    

答案 2 :(得分:0)

使用泛型保存方法

public void Save<T>(T data) where T: MyAbstractClass
{
    // your save method code here
}

您可以使用反思来确定您要保存的课程,您需要某个特定于某个班级AdminUser的内容。

AdminUser必须从相同的抽象类继承