まったく何もしないクラスにインターフェイスを実装すると、呼び出し元のコードが遅くなりますか? 例 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 (テキストロガー) は、実際に何かを行うため、実装されているコードの実行を遅くします。
しかし、例 2 はどうでしょうか。コンパイラは、クラスがインスタンス化され、メソッドが呼び出されたとしても、パスを下って何かを実行し、コンパイル時にそれを無視するコードがまったくないことを理解するのに十分なほどインテリジェントですか?