То, что я хочу сделать, действительно просто.У меня есть класс, который обрабатывает выполнение моей базы данных под названием clsSQLInterface
.Этот класс содержит статическую функцию с именем bool isSQLSafe
, которая будет возвращать false
, если SQL, отправляемый на выполнение, считается опасным.Это одна из причин, по которой я могу отфильтровывать любые злонамеренные действия.
Теперь другая часть моей программы должна иметь возможность выполнять такие действия, как UPDATE
, DELETE
и т. Д.думал, что я унаследую класс clsSQLInterface
и переопределю функцию isSQLSafe
чем-то, что всегда возвращает true
.
Это не вопрос безопасности базы данных, кстати!
Хорошо, я сделал это следующим образом ...
public class clsSQLInterface //Code not shown, just definitions
{
private static string connectionString(string sKey){...}
public static bool isSQLSafe(string sSQL){...}
public static DataTable executeSQLText(string sSQL, string sConnectionKey){...}
public static DataTable executeGenericQuery(clsGenericSQL query,string sDBKey){...}
}
И главный класс ..
public class clsSQLInterface_unsafe : clsSQLInterface
{
public clsSQLInterface_unsafe()
{
}
public new static bool isSQLSafe(string sSQL) //overriding the base method
{ return true; }
}
Хорошо.Проблема этого подхода заключается в том, что isSQLSafe
вызывается из методов executeSQLText
и executeGenericQuery
.Я хочу, чтобы эти методы вызывали переопределенный isSQLSafe
, который всегда возвращает true.Однако они этого не делают.Они вызывают базовую реализацию.
Должен ли я также переопределять каждый метод, который вызывает isSQLSafe
? Это кажется пустой тратой кода.
Конечно, когда я наследую класс, я фактически «копирую» все базовые методы, и они должны вести себя так, как будто они теперь являются частью clsSQLInterface_unsafe
?