嗨,我是 C# 中的接口和抽象类的新手,我遇到了一个问题我正在创建一个示例应用程序,我需要将详细信息保存到 db 保存功能对于应用程序很常见,只是对象不同例如。void Save(User data);
我的void Save(Admin data)
问题是如何动态指定用户和管理员类
user2541193
问问题
57 次
3 回答
1
使用泛型
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);
对签名的约束 iewhere T: class
规定只有类可以作为参数传递。但是, givenstring
实际上是 .NET 中的一种特殊类型的类,您可以在技术上调用
dbClass.Save("string")
如果您想完全控制类型,您可以让您的类从基类派生或实现特定接口并将其用作约束,例如
public class Entity
{
...
}
public class Admin : Entity
{
}
public class User : Entity
{
}
然后您将约束更新为where T : Entity
,这将确保您只能将实体传递给该Save
方法。
于 2013-07-05T10:26:41.693 回答
0
我可以看到两个选项:
创建
User
和Admin
实现相同的接口(或继承相同的抽象类),例如IDbEntity
. 您的方法将是:public void Save(IDbEntity data)
创建一个保存数据的私有泛型方法,然后创建两个公共包装器,每个类型一个:
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); }
于 2013-07-05T10:30:38.340 回答
0
为您的保存方法使用泛型
public void Save<T>(T data) where T: MyAbstractClass
{
// your save method code here
}
您可以使用反射来确定您要保存的课程是您需要特定于您的课程之一的东西,Admin
还是User
.
Admin
并且User
必须继承自同一个抽象类
于 2013-07-05T10:30:48.837 回答