Вы должны использовать предложение ORDER BY FIELD MySQL, чтобы решить эту проблему. Хотя, ответ был принят по этому вопросу, вот лучшее решение.
select 1 id, 'Zeta' order_col union all
select 2 id, 'Alpha' order_col union all
select 3 id, 'Gamma' order_col union all
select 4 id, 'Phi' order_col union all
select 5 id, 'Delta' order_col union all
select 6 id, 'Delta' order_col union all
select 7 id, 'Alpha' order_col union all
select 8 id, 'Gamma' order_col union all
select 9 id, 'Zeta' order_col union all
select 10 id, 'Phi' order_col
order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
Это лучше, чем
Если Вы удаляете новый от Вашего кода, Вы добираетесь:
предупреждение CS0108: 'Панель. Сделайте ()', скрывает наследованного участника 'Нечто. Сделайте ()'. Используйте новое ключевое слово, если сокрытие было предназначено.
компилятор C# просто предупреждает Вас, что Вы могли бы делать что-то, что Вы не предназначали и просите, чтобы Вы вставили новый ключевое слово, чтобы подтвердить, что Вы знаете то, что Вы делаете. Помимо подавления предупреждения, это не имеет никаких других эффектов.
Это применяется только для внешних вызывающих абонентов. Помните, что можно назвать статический метод базового класса, таким образом, что-то вроде этого допустимо:
class Foo
{
public static void Do() { Console.WriteLine("Foo.Do"); }
}
class Bar : Foo // :Foo added
{
public static void Something()
{
Do();
}
}
Поэтому предупреждение говорит Вам помещать новое, Вы хотите избежать любого беспорядка при выполнении этого:
class Foo
{
public static void Do() { Console.WriteLine("Foo.Do"); }
}
class Bar : Foo // :Foo added
{
public static void Something()
{
Do();
}
public static new void Do() { Console.WriteLine("Bar.Do"); }
}
взгляните на это
public class BaseC { public static int x = 55; public static int y = 22; } public class DerivedC : BaseC { // Hide field 'x'. new public static int x = 100; static void Main() { // Display the new value of x: Console.WriteLine(x); // Display the hidden value of x: Console.WriteLine(BaseC.x); // Display the unhidden member y: Console.WriteLine(y); } } /* Output: 100 55 22 */
, Ваш пример, для прояснения, должен быть
public class Foo
{
public static void Do() {}
}
public class Bar :Foo
{
public new static void Do() {}
}
В Вашем примере Панель второго класса, кажется, не наследовалась от Foo. Это, кажется, опечатка, потому что она не делает имеет смысл иначе.
Принятие, что это опечатка, "новый" модификатор явно скрывает версию базового класса функции Do()
. Это означает, что полученная версия Do()
метод эффективно заменяет версию базового класса.
Используя "новый" здесь документирует то, что унаследованный метод предназначается как замена для версии базового класса Do()
.
Для получения дополнительной информации, см. новый Модификатор (C#)