3

我有命名空间:

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

5 回答 5

4

你想要达到的目标是不可能的。您将得到的最接近的东西是using alias 指令,如下所示:

using User = Myproject.Core.Db.User;

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

我认为这里真正的解决方案是给你的类更多的描述性标识符。

于 2013-07-03T13:32:38.287 回答
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();
        }
    }
}

您避免在其中使用完全限定名称的方法BLL是与其他两个名称位于一个公共名称空间内。

于 2013-07-03T13:56:31.303 回答
2

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

在您的情况下,这意味着如果您在 namespaceMyProject.Core中,您可以将您的类引用为Db.UserModel.User。但是,如果您在 namespaceMyProject.BLL中,则必须包含Core前缀 ( Core.Db.Userand Core.Model.User)。

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

using DbUser = MyProject.Core.Db.User;
using ModelUser = MyProject.Core.Model.User;
于 2013-07-03T14:13:49.863 回答
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# 中,无法使用显示的示例;它根本不是受支持的功能。

于 2013-07-03T13:53:01.040 回答
0

您可以做的一件事,我们可能应该做的更多,就是使用与当前命名空间相关的命名空间。为此,只需将您的 usings 移动到命名空间声明中。它不能解决您所说的问题,但它是唯一可以让您移动文件夹而不受惩罚的引用方式。

namespace MyProject.Core{
    using Db;
    using Model;
于 2022-02-09T12:49:05.447 回答