我有 3 个具有相同属性的对象,每个对象都有 Id、Name 和 TypeCode。在数据库中,我们有一个包含 Id、Name 和 TypeCode 字段的第一个表,还有 3 个其他表,每个表包含每个对象的相应属性:
表 1:标识 | 姓名 | 类型代码
表 2:标识 | 函数名
表 3:标识 | 分析名称
表 4:标识 | 属性名称
我们有一个名为“GetProperties”的存储过程,它根据对象的 TypeCode 返回对象的属性。“GetProperties”接受一个参数,即对象 ID。在调用存储过程之前我们不知道 TypeCode。
如果 TypeCode 是一个函数,则返回以下字段:
ID、名称、类型代码、函数名称
如果 TypeCode 是 Analysis 则返回以下字段:
ID、名称、类型代码、分析名称
等等...
我创建了 4 个类:从 MyObject 类继承的 FunctionObject、AnalysisObject 和 PropertyObject。
public class MyObject
{
public decimal Id;
public string Name;
public string TypeCode;
}
public class FunctionObject: MyObject
{
public string FunctionName;
}
public class AnalysisObject: MyObject
{
public string AnalysisName;
}
public class PropertyObject: MyObject
{
public string PropertyName;
}
我创建了一个通用函数,允许我动态创建对象:
public T GetObject<T>(string storedProcedure, List<DataBaseParameteres> parameters) where T: new()
{
T result = new T();
OpenConnection();
SqlDataReader reader = ExecuteSqlCommand(storedProcedure, parameters);
PropertyInfo[] properties = typeOf(T).GetProperties();
if(reader.Read())
{
for(int i = 0; i<properties.Count(); i++)
{
object value = Convert.ChangeType(reader[properties[i].Name], properties[i].PropertyType);
properties[i].SetValues(result, value, null);
}
}
reader.Close();
CloseConnection();
return result;
}
该函数运行良好,我可以如下调用它并返回创建的对象:
MyObject obj1 = GetObject<MyObject>(obj1Id);
我现在的问题是我想知道如何修改通用方法“GetObject”来创建对象:FunctionObject、AnalysisObject 和 Propertyobject。调用函数时我对 TypeCode 没有任何想法,所以除非我有 TypeCode,否则我不能这样做:
FunctionObject obj2 = GetObject<FunctionObject>(obj2Id);