Open Eilon opened 2 years ago
Tricky thing here is that delegates, created for the same object, should be considered equal. That is possible with regular static method, but requires using reflection and is much slower (probably neglectable for our needs, but anyway):
Interesting, that is definitely something to consider. I wonder if there's some clever syntax to avoid reflection and have the compiler provide the delegate with the right identity? It's just so unusual for extension methods to provide any concrete benefit aside from the compiler syntax sugar!
Anyway, this is hardly a big matter, I just don't like extension methods on object 😁
According to SharpLab, it compiles to smth like this:
[CompilerGenerated]
internal unsafe static Func<object> <<Main>$>g__Del4|0_3(object o)
{
return new Func<object>(o, (nint)(delegate*<object, object>)(&Helper.This));
}
But I cannot write such code manually, I can't even find Func constructor with two parameters.
In https://github.com/dotnet/MobileBlazorBindings/pull/345 a new internal extension method was added to make creating more efficient delegates easier.
We should consider an approach that avoids extension methods on
object
, such as using a regular static method.