是否可以进行相对C#命名空间引用?

时间:2013-07-03 13:29:40

标签: c# namespaces using-statement

我有名称空间:

MyProject.Core.Db
MyProject.Core.Model

我有课:

MyProject.Core.Db.User
MyProject.Core.Model.User

是否有可能:

using MyProject.Core;

namespace MyProject.BLL
{
    public class Logic
    {
        public static void DoSomething()
        {
            var userEntity = new Db.User();
            var userModel = new Model.User();
        }
    }
}

我只想避免在类名中使用后缀(UserModel,UserEntity)。

是否有可能以某种方式在C#中进行?

4 个答案:

答案 0 :(得分:4)

你想要实现的目标是不可能的。你将得到的最接近的是using alias directive,如下所示:

using User = Myproject.Core.Db.User;

这将不再需要完全限定 Myproject.Core.Db.User 的路径。但是,您仍然需要为至少一个类指定完全限定的路径。您可以像Servy演示的那样为另一种类型创建另一个别名,但此时我只是重命名这些类。

我认为这里的真正解决方案是为您的课程提供更具描述性的标识符。

答案 1 :(得分:4)

我不明白为什么人们说这是不可能的。当然有可能,您只需要在创建目标类时在命名空间中更具体一些(即,您只能省略命名空间的公共部分):

namespace MyProject.Core.Db
{
    public class User
    {
    }
}

namespace MyProject.Core.Model
{
    public class User
    {
    }
}

namespace MyProject.BLL
{
    public class Logic
    {
        public static void DoSomething()
        {
            var foo = new Core.Db.User();
            var boo = new Core.Model.User();
        }
    }
}

答案 2 :(得分:2)

C#支持相对命名空间引用。

在您的情况下,这意味着如果您在名称空间MyProject.Core中,则可以将您的类引用为Db.UserModel.User。但如果您在名称空间MyProject.BLL中,则必须添加Core前缀(Core.Db.UserCore.Model.User)。

如果这对您来说不够好并且您不想更改命名空间结构,那么您最好的选择可能是将using添加到使用相关类型的所有文件中。

using DbUser = MyProject.Core.Db.User;
using ModelUser = MyProject.Core.Model.User;

答案 3 :(得分:0)

您可以为不导入名称空间的一个类添加别名:

using MyProject.Core.Db;
using ModelUser = MyProject.Core.Model.User;

namespace MyProject.BLL
{
    public class Logic
    {
        public static void DoSomething()
        {
            var userEntity = new User();
            var userModel = new ModelUser();
        }
    }
}

在C#中,不可能使用显示的示例;它根本不是受支持的功能。