Здравствуйте, Alexander_fx, Вы писали:
A_>Есть ли разница в быстродействии если я унаследуюсь от интерфейса или базового типа
A_>Например можно обьявить интерфейс с функцией
A_>а можно сделать базовый класс с такой же функцией.
A_>Вопрос — будет ли разница в быстродействии при обращении к этим методам.
A_>Просто предпологается что обращений будут миллионы — и хочется заранее выбрать правильную стратегию.
Можно провести такой эксперимент:
namespace Calls
{
class Base
{
public virtual void Foo()
{
}
}
class Derived : Base
{
public override void Foo()
{
}
}
interface IBase
{
void Bar();
}
class Realizer : IBase
{
public void Bar()
{
}
}
class Program
{
static void Main(string[] args)
{
Base b = new Derived();
IBase ib = new Realizer();
b.Foo();
ib.Bar();
}
}
}
Just-in-time компилятор генерирует такой код:
b.Foo();
00000053 mov ecx,edi
00000055 mov eax,dword ptr [ecx]
00000057 call dword ptr [eax+38h]
0000005a nop
ib.Bar();
0000005b mov ecx,ebx
0000005d call dword ptr ds:[00920018h]
00000063 nop
Здесь видно, что вызов по интерфейсу компилятор оптимизирует в статический.
Вот такая вот петрушка...