Как к выбрал между новым и переопределением в C#?

Вы должны использовать параметры для передачи значений в оператор SQL, иначе вы будете уязвимы для атак внедрения SQL. Вы можете создать объект SqlCommand, создать SqlParameter объекты, а затем установить для них значения. Если какое-либо из ваших значений равно нулю, вы можете передать DBNull.Value в качестве значения параметра.

SqlCommand cmd = con.CreateCommand();
string cm = "SELECT column1, column2, column3 "
cm += "FROM mytablename "
cm += "WHERE column1=@mSI "
cm += "AND column2=@mSSI OR column1=@mYSI AND column2=@mSI";
cmd.CommandText = cm;

for(int mSSI=0; mSSI<sR.Count(); mSSI++)
{
   cmd.Parameters.AddWithValue("@mSI ", sR[mSI]);

   // check for a null value
   if (sr[mSSI] == null)
   {
     cmd.Parameters.AddWithValue("@mSSI", DBNull.Value);
   }
   else
   { 
     cmd.Parameters.AddWithValue("@mSSI", sR[mSSI]);
   }

   cmd.Parameters.AddWithValue("@mYSI", sR[mYSI]);

   SqlDataAdapter sd = new SqlDataAdapter(cmd);
   DataTable dat = new DataTable();
   sd.Fill(dat);
   // clear parameters after each iteration
   cmd.Parameters.Clear()
}
5
задан suhair 4 December 2008 в 13:16
поделиться

3 ответа

"новый" означает, что у Вас есть два совершенно других метода, что касается CLR - у них, оказывается, есть то же имя, но они не связаны с точки зрения наследования. Это означает это, если Вы работаете:

Base b = new Derived();
Derived d = new Derived();
b.MyMethod(); // Calls Base.MyMethod
d.MyMethod(); // Calls Derived.MyMethod

Это может сделать для некоторого очень твердо понимаемого кода.

Обычно, если Вы хотите различные методы, назовите их разными вещами. Нормальная причина использовать то же имя (и подпись) состоит в том, чтобы переопределить поведение метода базового класса. В той точке у Вас нет выбора, но сохранять имя/подпись тем же.

12
ответ дан 18 December 2019 в 12:02
поделиться

Я все еще пытаюсь разработать то, что вариант использования для "нового" кроме неприятного хакерства.

3
ответ дан 18 December 2019 в 12:02
поделиться

Это - на самом деле не выбор, который Вы имеете. Это наложено на Вас однако созданным базовый класс. Если там существует метод с тем же именем, и оно отмечено как "виртуальное" затем, необходимо использовать переопределение, если Вы не хотите иметь некоторые серьезно забавные ошибки, появляющиеся в будущем, когда люди начинают бросать объекты Вашего класса к базовому классу...

Хотя, если тот метод НЕ отмечен как "виртуальный" затем, единственный способ создать НОВЫЙ метод при помощи "нового" ключевого слова. Отметьте, хотя это, это не заменит вызовы метода, где ссылка имеет typeof (базовый класс) к Вашему методу. Таким образом, это - главным образом просто синтаксический сахар для создания нового метода с тем же именем и той же подписью...

Хотя, когда код поражает Ваше железо, это не ничто иное затем совершенно другой метод с тем же именем и той же подписью. Где переопределенный метод заменит каждый вызов включая тех, которые в блоке базового класса к Вашему новому методу...

Так сравнение их похоже на сравнение автомобилей и errh... птицы или что-то...

0
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: