Привет!
Ниже представлен код. Ответьте на следующие вопросы:
1) Как вызвать функцию TestDerived.Print не указывая явно, что класс имплементирует интерфейс ITest?
2) Как вообще происходит вызов функции Print в 2-х случаях когда TestDerived: Test, ITest и когда TestDerived: Test?
При вызове CallPrint происходит преобразование к ITest, потом поиск функции идет в по какой таблице и у какого типа?
Видимо, если будет описано 2-е, то 1-е я сам пойму
interface ITest
{
void Print();
}
class Test : ITest
{
public void Print()
{
Console.WriteLine("Test class");
}
}
class TestDerived : Test // , ITest
{
public new void Print()
{
Console.WriteLine("TestDerived class");
}
}
....
public static void CallPrint(ITest iTest)
{
iTest.Print();
}
static void Main(string[] args)
{
TestDerived test = new TestDerived();
CallPrint(test); // Test class
}
Здравствуйте, Minimaxus, Вы писали:
M>2) Как вообще происходит вызов функции Print в 2-х случаях когда TestDerived: Test, ITest и когда TestDerived: Test?
M>При вызове CallPrint происходит преобразование к ITest, потом поиск функции идет в по какой таблице и у какого типа?
См.
C# Language Specification, разделы 13.4.4 Interface mapping, 13.4.5 Interface implementation inheritance, 13.4.6 Interface re-implementation, 13.4.7 Abstract classes and interfaces. Там всё подробно описано, в двух словах трудно пересказать.
Здравствуйте, Minimaxus, Вы писали:
M>2) Как вообще происходит вызов функции Print в 2-х случаях когда TestDerived: Test, ITest и когда TestDerived: Test?
M>При вызове CallPrint происходит преобразование к ITest, потом поиск функции идет в по какой таблице и у какого типа?
Вот
темаАвтор: BokiyIS
Дата: 12.02.09
, в которой есть довольно подробное объяснение.