Замедляет ли пустая реализация интерфейса выполнение? [дубликат]C#

Место общения программистов C#
Ответить
Anonymous
 Замедляет ли пустая реализация интерфейса выполнение? [дубликат]

Сообщение Anonymous »

Если я реализую в классе интерфейс, который абсолютно ничего не делает, замедляет ли это работу кода, из которого он вызывается? Будет ли пример 2 (NoLogger) влиять на скорость кода, в котором он используется?

Пример кода:

Код: Выделить всё

interface ILogger{
void Write(string text);
}

class TextLogger : ILogger {
public void Write(string text){
using (var sw = new StreamWriter(@"C:\log.txt"))
{
sw.WriteLine(text);
}
}
}

class NoLogger : ILogger{
public void Write(string text){
//Do absolutely nothing
}
}
Реализация 1, TextLogger

Код: Выделить всё

void Main(){
ILogger tl = new TextLogger();
for (int i = 0; i < 100; i++)
{
tl.Write(i.ToString());
}
}
Реализация 2, NoLogger

Код: Выделить всё

void Main(){
ILogger tl = new NoLogger();
for (int i = 0; i < 100; i++)
{
tl.Write(i.ToString());
}
}
Конечно, пример 1 (textlogger) замедляет выполнение кода, в котором он реализован, потому что он действительно что-то делает.

А как насчет примера 2? Достаточно ли компилятор умен, чтобы понять, что даже несмотря на то, что создается экземпляр класса и вызывается метод, абсолютно нет кода, который делает что-либо по любому пути и просто игнорирует это во время компиляции?

Подробнее здесь: https://stackoverflow.com/questions/197 ... -execution
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»