C# Метод. Странность переопределенияC#

Место общения программистов C#
Ответить
Anonymous
 C# Метод. Странность переопределения

Сообщение Anonymous »

Рассмотрим следующий фрагмент кода: < /p>

Код: Выделить всё

using System;

class Base
{
public virtual void Foo(int x)
{
Console.WriteLine("Base.Foo(int)");
}
}

class Derived : Base
{
public override void Foo(int x)
{
Console.WriteLine("Derived.Foo(int)");
}

public void Foo(object o)
{
Console.WriteLine("Derived.Foo(object)");
}
}

public class Program
{
public static void Main()
{
Derived d = new Derived();
int i = 10;
d.Foo(i);
}
}
< /code>

А удивительный вывод: < /p>

Derived.Foo(object)
< /code>

Я ожидаю, что он выберет переопределенный метод Foo (int x) < /code>, поскольку он более конкретный. Тем не менее, компилятор C# выбирает неэнергетированную версию Foo (Object O) 
. Это также вызывает операцию по боксу. < /P>

Какова причина такого поведения? < /P>

Подробнее здесь: https://stackoverflow.com/questions/526 ... -weirdness
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»