我有名称空间:
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#中进行?
答案 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.User
和Model.User
。但如果您在名称空间MyProject.BLL
中,则必须添加Core
前缀(Core.Db.User
和Core.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#中,不可能使用显示的示例;它根本不是受支持的功能。