none
Приведение при использовании System.Diagnostics.EventLog RRS feed

  • Вопрос

  • Здравствуйте, у меня разгорелся небольшой спор с другом по основам C#.

    Есть ли разница между

    eventLog = new System.Diagnostics.EventLog();
    ((System.ComponentModel.ISupportInitialize)eventLog)).BeginInit();

    и

    eventLog = new System.Diagnostics.EventLog();
    eventLog.BeginInit()

Ответы

  • Нет, т.к. будет работать полиморфизм, а он говорит, что вызываеться метод именно того класса какого объект по ссылке. Разница может возникнуть только в том случае, если EventLog наследует два интрефейса с одинаковым методом BeginInit.  Но в данном случае, такой ситуации не наблюдается.


    Отвечающий
  • С практической точки зрения в данном случае разницы никакой. За исключением CIL представления

    IL_0008:  callvirt   instance void [System]System.Diagnostics.EventLog::BeginInit()
      IL_000d:  nop
      IL_000e:  ldloc.0
      IL_000f:  callvirt   instance void [System]System.ComponentModel.ISupportInitialize::BeginInit()
    

    но адрес в памяти всё равно один и тот же.

    • Помечено в качестве ответа dzelzs 21 мая 2012 г. 10:57
    Модератор

Все ответы

  • Нет, т.к. будет работать полиморфизм, а он говорит, что вызываеться метод именно того класса какого объект по ссылке. Разница может возникнуть только в том случае, если EventLog наследует два интрефейса с одинаковым методом BeginInit.  Но в данном случае, такой ситуации не наблюдается.


    Отвечающий
  • С практической точки зрения в данном случае разницы никакой. За исключением CIL представления

    IL_0008:  callvirt   instance void [System]System.Diagnostics.EventLog::BeginInit()
      IL_000d:  nop
      IL_000e:  ldloc.0
      IL_000f:  callvirt   instance void [System]System.ComponentModel.ISupportInitialize::BeginInit()
    

    но адрес в памяти всё равно один и тот же.

    • Помечено в качестве ответа dzelzs 21 мая 2012 г. 10:57
    Модератор
  • Спасибо :)