从静态基类方法调用静态派生类方法
本文关键字:类方法 静态 调用 派生 基类 | 更新日期: 2023-09-27 18:10:34
问题:我有一个实体类(基类),从中继承多次。现在我在所有的派生类中都有一个Add
方法和一个Validate
方法。这些函数在所有派生类中都是相同的,它们是static
。
这是我的Add
方法
public static long Add(DBData[] UserData)
{
SortedDictionary<string, DBData> Data = new SortedDictionary<string, DBData>();
foreach (DBData d in UserData)
{
Data.Add(d.FieldName, d);
}
if (Project.Validate(Data, OperationMode.Add))
{
return DBUtility.Insert("Project", VSCommon.Serialise(Data));
}
else
{
return -1;
}
}
现在我在上面的函数中有"Project
"(2个地方,一个类型为Project
的对象也属于这个函数,另一个是数据库表名)。这是我所有派生类中唯一的不同之处。我想把这个Add
方法放在我的基类中,这样我就可以跳过在每个派生类中多次编写它。
我搜索了一下,发现有些人试图使用泛型,但我似乎没有像使用泛型声明时那样选择它。当我调用Validate
-方法时,出现了编译错误。此外,我需要类的名称为string
,以获得相关的表名。
不确定我能定义我的问题,任何帮助是感激的。谢谢。
你可以在基类&virtual)方法,该方法为这个类返回"Project",为其他类返回其他字符串。然后从静态Add方法中引用它。
我认为你也可以使用反射来获得"项目"字符串,如果需要的话。但是我不建议这样做,因为它增加了数据库和代码之间不必要的耦合。
我使用以下ADD函数更改来解决我的问题
public static long Add<T>(DBData[] UserData)
{
SortedDictionary<string, DBData> Data = new SortedDictionary<string, DBData>();
foreach (DBData d in UserData)
{
Data.Add(d.FieldName, d);
}
MethodInfo m = typeof(T).GetMethod("Validate");
bool r = (bool)m.Invoke(null, new object[] { Data, OperationMode.Add });
if (r)
{
return DBUtility.Insert(typeof(T).Name, VSCommon.Serialise(Data));
}
else
{
return -1;
}
}
然后我必须将调用更改为Project.Add
编辑:我刚刚意识到Project.Add