Hola, tengo un servicio de enumeración simple en el que hay algunos métodos de extensión definidos
public enum Service { //enum values .. } public static class ServiceExtensions { internal static string GetSomeCode(this Service service) { // Does something } //another extension method that calls GetSomeCode() internal static string GetSomeOtherData(this Service service) { // Look at the call for extension method here string code = GetSomeCode(service); } } Sé que la sintaxis para llamar al método de extensión es similar a llamar a la función miembro para this tipo específico.
En el ejemplo anterior, debería ser como -
string code = service.GetSomeCode();Encontré un uso similar de la sintaxis en otros lugares del proyecto. Mi pregunta es si hay alguna diferencia entre ambas llamadas. Si no, ¿cuál debería preferir usar?
No, no hay diferencia. Además, el último ( service.GetSomeCode() ) se convertirá al primero ( GetSomeCode(service) ) durante la compilación.
Si visitas sharplab.io y pegas allí el siguiente código:
public enum Service { } public static class ServiceExtensions { internal static string GetSomeCode(this Service service) { return ""; } internal static string GetSomeOtherData(this Service service) { string code = service.GetSomeCode(); return code; } }Luego verá que el código descompilado se verá así:
using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; [assembly: Extension] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] public enum Service { } [Extension] public static class ServiceExtensions { [Extension] internal static string GetSomeCode(Service service) { return ""; } [Extension] internal static string GetSomeOtherData(Service service) { return GetSomeCode(service); } }Entonces, es solo un azúcar sintáctico.