C# 相同的类型,不同的命名空间。

C# 相同的类型,不同的命名空间。,c#,visual-studio,nhibernate,C#,Visual Studio,Nhibernate,因此,我尝试使用完全相同的类型将实体转换为DTO。这两种类型(类)完全相同,只是它们位于不同的命名空间中。 当我从另一个命名空间引用其中一个时,是否需要强制转换它们 或者VS应该自动知道并识别它们是完全相同的,尽管在不同的文件中 谢谢 你真的认为下列行为合法吗 var bankClient = new SomeOnlineBankingSite.Client(...); var shoppingClient = (SomeInternetShoppingSite.Client)bankClien

因此,我尝试使用完全相同的类型将实体转换为DTO。这两种类型(类)完全相同,只是它们位于不同的命名空间中。

当我从另一个命名空间引用其中一个时,是否需要强制转换它们

或者VS应该自动知道并识别它们是完全相同的,尽管在不同的文件中

谢谢

你真的认为下列行为合法吗

var bankClient = new SomeOnlineBankingSite.Client(...);
var shoppingClient = (SomeInternetShoppingSite.Client)bankClient;

尽管这两个类是相同的,但它们是两个完全不同的概念的抽象。即使编译器可以很容易地找出类型定义是相同的,它也无权允许在两者之间进行显式或隐式转换;只有类的作者有权允许这种转换,如果他们愿意的话,实现一个cast操作符、一个静态工厂方法或者你所拥有的任何东西。

基本上你所描述的是。最接近C#的等价词是“dynamic”关键字,但我认为这并不是你想要的

正如其他人所指出的,C#通常不遵循您描述的类型模型,您可能不希望它这样做。正如InBetween的示例所示,“相同的名称”、“相同的接口”和“相同的含义”之间有很大的区别


为了更直接地回答这个问题,首先,我严肃地质疑在不同的名称空间中拥有两个相同的类是否明智——这似乎相当明显地违反了原则。话虽如此,如果在它们之间定义一个隐式转换,应该允许您或多或少地互换使用它们(尽管这样做的缺点是可能会混淆您所指的两个对象中的哪一个;我倾向于说,基于这一事实,这是一种不好的做法)。

不同的名称空间=不同的类型。在这种情况下,VS无法(当然也不应该)自动确定您的意图。您需要提供一个转换/强制转换操作符。看一看,试一下,你就会知道答案……问题的关键是你在假设你要问什么。名称空间不同的两种类型是不同的类型,因为它们位于不同的名称空间中。两种类型“相同但在不同名称空间中”的概念是自相矛盾的。
var bankClient = new SomeOnlineBankingSite.Client(...);
var shoppingClient = (SomeInternetShoppingSite.Client)bankClient;