这可能是一个无知的问题,但我不能确定,为什么我不能使用命名空间别名和扩展方法在一起。
This may be an ignorant question, but I'm unsure why I can not use namespace aliasing and extension methods together.
下面的示例工作得很好:
The following example works just fine:
的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中,如下所示:
However, when I alias domain as follows in Program.cs:
using Domain = ExtensionMethodTest.Domain;
扩展方法不再起作用。
The extension method no longer works..
这可以是相当令人沮丧,当我处理各种转换域对象签订合同的对象(比方说,我有4个域组件和4个合约总成),用于Web服务的使用。使用别名将是非常方便的,因为我可以别名如下,并继续使用各种扩展方法(如ToContract等):
This can be rather frustrating when I'm dealing with converting various domain objects to contract objects (let's say I have 4 domain assemblies and 4 contract assemblies) for use in a web service. Using aliasing would be very handy as I could alias as follows and continue to use the various extension methods (such as ToContract, etc.):
using BillingContracts = Namespace.Billing.Contracts;
using IssuingContracts = Namespace.Issuing.Contracts;
等等...
etc...
我期待着答案。我敢肯定,这是简单的,但我为我的生活,想不通为什么它不工作。
I look forward to the answer.. I'm sure it's straight forward, but I, for the life of me, can't figure out why it doesn't work.
谢谢!
确认仍然增加的非别名 using语句:
Make sure to still add a non-aliased using statement:
的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();
}
}
}