Пример кода:
Код: Выделить всё
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
}
}
Код: Выделить всё
void Main(){
ILogger tl = new TextLogger();
for (int i = 0; i < 100; i++)
{
tl.Write(i.ToString());
}
}
Код: Выделить всё
void Main(){
ILogger tl = new NoLogger();
for (int i = 0; i < 100; i++)
{
tl.Write(i.ToString());
}
}
А как насчет примера 2? Достаточно ли компилятор умен, чтобы понять, что даже несмотря на то, что создается экземпляр класса и вызывается метод, абсолютно нет кода, который делает что-либо по любому пути и просто игнорирует это во время компиляции?
Подробнее здесь: https://stackoverflow.com/questions/197 ... -execution
Мобильная версия