Почему дополнительные методы не работают с искажением пространства имен?

Это может быть неосведомленным вопросом, но я не уверен, почему я не могу использовать искажение пространства имен и дополнительные методы вместе.

Следующий пример работает просто великолепно:

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;

и т.д...

Я с нетерпением жду ответа.. Я уверен, что это является прямым, но я, ни за что в жизни, не могу выяснить, почему это не работает.

Спасибо!

16
задан Ian P 26 July 2010 в 17:47
поделиться

1 ответ

Обязательно добавьте несглаженный оператор using:

Program.cs

using System;
using ExtensionMethodTest.Domain; //DON'T FORGET A NON-ALIASED USING
using MyDomain = ExtensionMethodTest.Domain;

namespace ExtensionMethodTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var m = new MyDomain.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();
        }
    }
}
11
ответ дан 30 November 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: