are true?
interface IFoo
{
int Foo();
}
class A : IFoo
{
public int Foo() { return 0; }
}
class B : A
{
public new int Foo() { return 1; }
}
class C : B, IFoo
{
public new int Foo() { return 2; }
}
class D : C, IFoo
{
public new int Foo() { return 3; }
}
D d = new D();
A a = d;
B b = d;
C c = d;
- (a as IFoo).Foo() returns 3
- (c as IFoo).Foo() returns 3
- (b as IFoo).Foo() returns 2
- (b as IFoo).Foo() returns 1
- (d as IFoo).Foo() returns 2
На мою думку перші два вірні. А от наприклад chatGPT4 кожного разу видає різну відповідь. :(
https://sharplab.io/
Надайте трохи контексту. Як саме мені має допомогти цей сервіс? Дякую.
Вставляєш код і дивишся що буде)
Вставив. Не побачив.
відкрий студію зроби новий проект встав код додай рядок var test = (a as IFoo).Foo(); коли курсор на цьому рядку нажми F8 потім нажми F5 після цього запуститься програма і зупиниться на рядку який ти написав знову нажми F8 та наведи мишою на test.
Ну це я і через Console можу подивитися. Не знаю на що я очікував. Можливо потрібно було так: Поясніть що почитати щоб зрозуміти?
Я думаю у майків десь повинна бути стаття про приведення типів
https://en.wikipedia.org/wiki/Virtual_method_table Це про С++ але вони(віртуальні методи) так само працюють у C#
Обсуждают сегодня