Просто любопытный на предмет того, как.NET CLR обрабатывает интерфейсы внутренне?
Q1], Что происходит, когда CLR встречается с чем-то как:
простой интерфейсный пример. (то же используемое ниже.)
interface ISampleInterface
{
void SampleMethod();
}
class ImplementationClass : ISampleInterface
{
// Explicit interface member implementation:
public void SampleMethod()
{
// Method implementation.
}
static void Main()
{
//Declare an interface instance.
ISampleInterface mySampleIntobj = new ImplementationClass(); // (A)
// Call the member.
mySampleIntobj.SampleMethod();
// Declare an interface instance.
ImplementationClass myClassObj = new ImplementationClass(); // (B)
//Call the member.
myClassObj.SampleMethod();
}
}
Q2: В вышеупомянутом примере, как (A) и (B) дифференцируются?
Q3: Универсальные Интерфейсы рассматривают по-другому?
(Чувствуйте себя подобно новичку при задавании основных вопросов как они... так или иначе....),
Спасибо все.
В этих битах кода практически нет различий. Оба в конечном итоге вызывают одну и ту же функцию. Вызов метода через тип класса может дать незначительные преимущества в производительности.
Если вы хотите узнать, как все это реализовано, посмотрите Таблицы виртуальных методов .
Для получения более подробной информации см. это .
Использование интерфейса при создании ссылки на объект считается лучшей практикой по сравнению с непосредственным созданием его экземпляра с типом класса. Это подпадает под принцип программирования на интерфейс.
Это означает, что вы можете изменить конкретный класс, который реализует тот же интерфейс во время выполнения, используя что-то вроде внедрения зависимостей или даже может быть отражением. Ваш код не потребуется изменять, если вы программируете на интерфейс по сравнению с программированием на конкретный тип.