Esto puede ser una pregunta ignorante, pero no estoy seguro de por qué no puedo usar alias de espacio de nombres y métodos de extensión juntos.¿Por qué los métodos de extensión no funcionan con alias de espacio de nombres?
El siguiente ejemplo funciona bien:
Program.cs
using System;
using ExtensionMethodTest.Domain;
namespace ExtensionMethodTest
{
class Program
{
static void Main(string[] args)
{
var m = new Domain.MyClass();
var result = m.UpperCaseName();
}
}
}
MyClass.cs
using System;
namespace ExtensionMethodTest.Domain
{
public class MyClass
{
public string Name { get; set; }
}
}
MyClassExtensions.cs
using System;
namespace ExtensionMethodTest.Domain
{
public static class MyClassExtensions
{
public static string UpperCaseName (this MyClass myClass)
{
return myClass.Name.ToUpper();
}
}
}
Sin embargo, cuando alias de dominio de la siguiente manera en Program.cs:
using Domain = ExtensionMethodTest.Domain;
El método de extensión ya no funciona ..
Esto puede ser bastante frustrante cuando estoy tratando con la conversión de varios objetos de dominio para contraer objetos (supongamos que tengo 4 conjuntos de dominios y 4 conjuntos de contratos) para usar en un servicio web. El uso de alias sería muy práctico, ya que pude alias de la siguiente manera y seguir utilizando los diferentes métodos de extensión (como ToContract, etc.):
using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;
etc ...
espero que la respuesta Estoy seguro de que es sencillo, pero yo, por mi vida, no puedo entender por qué no funciona.
Gracias!
Es una buena pregunta. No estoy seguro de la respuesta exacta, pero probablemente tiene que ver con el hecho de que el método de extensión está vinculado al * tipo * del método de extensión, no a su * espacio de nombres *. Por lo tanto, el tipo en sí mismo debe ser visible dentro de su clase, por lo que aún tendría que incluir una declaración 'using' completa. –