如果我在一个类中实现一个接口,那绝对什么都不做,它会减慢调用它的代码吗?例子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
}
}
实现一、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(文本记录器)会减慢执行它的代码的速度,因为它实际上做了一些事情。
但是示例 2 呢?编译器是否足够聪明,可以弄清楚,即使实例化了一个类并调用了一个方法,也绝对没有代码可以在任何路径上做任何事情,而只是在编译时忽略它?