Есть задача «OverloadResolutionOverride» (Задача):
Что выведет следующий код?
class Foo
{
public virtual void Quux(int a)
{
Console.WriteLine("Foo.Quux(int)");
}
}
class Bar : Foo
{
public override void Quux(int a)
{
Console.WriteLine("Bar.Quux(int)");
}
public void Quux(object a)
{
Console.WriteLine("Bar.Quux(object)");
}
}
class Baz : Bar
{
public override void Quux(int a)
{
Console.WriteLine("Baz.Quux(int)");
}
public void Quux<T>(params T[] a)
{
Console.WriteLine("Baz.Quux(params T[])");
}
}
void Main()
{
new Bar().Quux(42);
new Baz().Quux(42);
}
Данный код выведет:
Bar.Quux(object)
Baz.Quux(params T[])
В ответе к этой задаче указано:
"Есть такое правило: если при вызове некоторого метода в «текущем» классе находится подходящая сигнатура, то компилятор не будет даже смотреть на родительские классы."
Разве считается, что перегруженный метод Quux(int)
находится в базовом классе, а не в текущем? И если так и есть, то каким образом мне обратиться именно к методу Quux(int)
текущего класса?
public void Quux(object a)
{
Console.WriteLine("Bar.Quux(object)");
}
в классе Bar
и
public void Quux<T>(params T[] a)
{
Console.WriteLine("Baz.Quux(params T[])");
}
в классе Baz
точно такими методами, как в ответе к этой задаче:
Eсли при вызове некоторого метода в «текущем» классе находится подходящая сигнатура, то компилятор не будет даже смотреть на родительские классы.
Другие 2 методы, имея override
, хотят от компилатора смотреть на родительские классы (имеют сигнатуру с декорацией).
Чтобы вызвать конкретно Quux(int) из Bar или Baz нужно явным образом привести обьект класса к Foo:
Foo bar = new Bar();
Foo baz = new Baz();
bar.Quux(42);
baz.Quux(42);
Тогда получим желаемый вывод:
Bar.Quux(int)
Baz.Quux(int)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Что это за зверь, как это сделать и когда этот хинт лучше использовать?
Пишу свой интерфейс(для теста)Задал форме свойство FormBorderStyle = None Также, перегрузил данное свойство, дабы менять размер формы:
Добрый день ребят, нуждаюсь в Вашей помощи, уже бьюсь неделю над одним вопросом, ничего в голову не приходит Есть игровой лаунчер, естественно...
Как можно проверить содержит ли буфер обмена текст, картинку или ссылку?