In C#, extension methods cannot be dynamically dispatched because they are resolved at compile-time. This means that the method to be called is determined based on the static type of the object at compile-time, rather than the actual runtime type of the object.
For example, consider the following extension method:
public static class StringExtensions { public static string Reverse(this string s) { char[] chars = s.ToCharArray(); Array.Reverse(chars); return new string(chars); } } This extension method adds a Reverse method to the string class, which reverses the order of the characters in the string.
If we have a variable of type object that refers to a string object, we cannot call the Reverse method on it directly, because the Reverse method is an extension method and not a member of the string class. However, we can call the Reverse method using the extension method syntax:
object obj = "hello"; string reversed = obj.Reverse(); // This will not compile
The above code will not compile, because the Reverse method cannot be resolved dynamically at runtime.
Instead, we need to cast the obj variable to a string first:
object obj = "hello"; string str = (string)obj; string reversed = str.Reverse(); // This will work
In this example, we first cast the obj variable to a string, which allows us to call the Reverse method using the extension method syntax. The Reverse method is then resolved at compile-time based on the static type of the str variable, which is a string.
"C# extension methods compile-time resolution example"
Code:
using System; public static class StringExtensions { public static void DisplayLength(this string text) { Console.WriteLine($"Length: {text.Length}"); } } class Program { static void Main() { object dynamicText = "Dynamic dispatch example"; // The following line won't compile because extension methods are resolved at compile-time. // dynamicText.DisplayLength(); } } Description: Provides a simple code example illustrating the compile-time resolution limitation of extension methods when attempting to call an extension method on a dynamically typed object (object). The code won't compile due to the inability to resolve the extension method dynamically.
osx-mountain-lion wicket listeners windows-server-2012 bulk-load parentheses vectormath compareto dom eslint-config-airbnb