Это может быть неосведомленный вопрос, но я не уверен, почему я не могу использовать методы псевдонимов пространства имен и методы расширения вместе.Почему методы расширения не работают с псевдонимом пространства имен?
Следующий пример работает просто отлично:
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();
}
}
}
Однако, когда я псевдоним домена следующим образом в Program.cs:
using Domain = ExtensionMethodTest.Domain;
Метод расширения больше не работает ..
Это может быть довольно неприятно, когда я имею дело с преобразованием различных объекты домена для контрактных объектов (допустим, у меня есть 4 сборки домена и 4 сборки контракта) для использования в веб-службе. Использование псевдонимов было бы очень удобно, как я мог бы псевдоним следующим образом и продолжать использовать различные методы расширения (например, ToContract и т.д.):
using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;
и т.д ...
Я с нетерпением жду ответа .. Я уверен, что это прямолинейно, но я, для жизни, не могу понять, почему это не работает.
Спасибо!
Это хороший вопрос. Я не уверен в точном ответе, но, вероятно, это связано с тем, что метод расширения привязан к методу расширения * type *, а не к его * пространству имен *. Следовательно, сам тип должен быть виден внутри вашего класса, поэтому вам все равно придется включать полный оператор 'using'. –