using System.Diagnostics;
using System.Collections.Generic;
{ public static void Main()
var interceptor = new FieldInterceptor();
var stopwatch = new Stopwatch();
TestExtension(interceptor, 100);
Console.WriteLine($"Total time: {stopwatch.ElapsedMilliseconds}ms");
TestExtension(interceptor, iter);
Console.WriteLine($"Total time (extension): {stopwatch.ElapsedMilliseconds}ms");
private static void Test(IFieldInterceptor interceptor, int iter)
for(var i = 0; i < iter; i++)
interceptor.Intercept(null);
private static void TestExtension(IFieldInterceptor interceptor, int iter)
for(var i = 0; i < iter; i++)
interceptor.Intercept(null, false);
public interface IFieldInterceptor
void Intercept(object value);
public class FieldInterceptor : IFieldInterceptor
public void Intercept(object value)
public void Intercept(object value, bool setter)
public static class FieldInterceptorExtensiosn
public static void Intercept(this IFieldInterceptor interceptor, object value, bool setter)
if (interceptor is FieldInterceptor fieldInterceptor)
fieldInterceptor.Intercept(value, setter);
interceptor.Intercept(value);