To może być ignoranckie pytanie, ale nie jestem pewien, dlaczego nie mogę używać metod aliasowania i rozszerzania przestrzeni nazw.Dlaczego metody rozszerzeń nie działają w przypadku aliasingu przestrzeni nazw?
Poniższy przykład działa dobrze:
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();
}
}
}
Jednak, kiedy alias domeny w następujący Program.cs:
using Domain = ExtensionMethodTest.Domain;
Metoda rozszerzenie nie działa ..
To może być dość frustrujące, kiedy mam do czynienia z konwersji różnych obiekty domeny do obiektów kontraktowych (powiedzmy, że mam 4 zespoły domen i 4 zespoły kontraktowe) do użytku w usłudze sieci Web. Korzystanie aliasing byłby bardzo przydatny, jak mogłem alias w następujący sposób i nadal korzystać z różnych metod rozszerzenie (takie jak ToContract, etc.):
using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;
etc ...
czekam na odpowiedź .. Jestem pewien, że to proste, ale ja, przez całe życie, nie mogę zrozumieć, dlaczego to nie działa.
Dzięki!
To dobre pytanie. Nie jestem pewien dokładnej odpowiedzi, ale prawdopodobnie ma to związek z tym, że metoda rozszerzenia jest powiązana z typem * rozszerzenia *, a nie z jego * obszarem nazw *. W związku z tym sam typ musi być widoczny w klasie, więc nadal musisz dołączyć pełną instrukcję 'using'. –