我在程序中有很多类,但几乎所有类都有相同的方法,并在SQL Server中调用几乎相同的存储过程。名称的不同之处在于类的名称(" pa" + class + CRUD)。有没有办法创建一个通用的调用方法?
我想制作一种方法,让我们说,学生班,会打电话给#34; paStudentSelect"并返回一个Student对象;如果从Teacher类调用该方法,则被叫SP是" paTeacherSelect"并返回一个Teacher对象。
额外:我必须检查因类不同而有所不同的空值。使用字符串数组作为参数可以检查字符串数组中命名的类的属性吗?
PS:我知道要做的事情是重构并再次考虑代码,表格和SP,但它不是我的程序。
答案 0 :(得分:0)
正如您所描述的班级名称一样,这应该是这样做的:
var proc_name = string.Format("pa{0}delete", GetType().Name);
额外:是的。使用反射,您可以为字符串数组中指定的类获取PropertyDescriptor
,或者,如果需要,可以获得Type
数组...
var types = new Type[] { typeof(Student), typeof(Teacher), ... };
foreach(var t types)
{
// todo: perform your null checks here
var proc_name = t.Name;
db.ExecuteSQLCommandOrWhatever(proc_name);
}
答案 1 :(得分:0)
我不明白你为什么要做这样的事情。你说你希望能够从不同的类(学生,教师等)调用一个通用的方法。如果你从一个普通的地方调用这个方法,那么创建一个通用的方法会更有意义,但是当你实际上从类本身调用方法时,你也可以调用适当的SP并避免使用你应该采用的方法类型的陷阱take(代码中断,名称更改,可能更多)。
如果您必须这样做,我可以考虑两种可能的解决方案:
1)扩展方法:为您的类创建一个通用的abstact类型(您可能已经有一个)并为该抽象类添加扩展方法。方法可能是这样的:
protected void CallCRUD(this AbstractType obj)
{
//call SP on this.TableName
}
2)通用方法:创建一个静态通用方法:
public static T CallCRUD<T>()
{
//call SP on typeof(T).Name
}
你的&#34;额外:&#34;非常模糊,所以我在那里找不到答案。