相同类型,不同命名空间

本文关键字:命名空间 同类型 | 更新日期: 2023-09-27 18:03:04

所以我试图使用完全相同的类型将实体转换为DTO。除了在不同的命名空间中,这两种类型(类)是完全相同的。

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

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

谢谢

相同类型,不同命名空间

namespace SomeInternetShoppingSite
{
     public class Client
     {
          public int Id { get; }
          public sprint FirstName { get; }
          ...
     }
}
namespace SomeOnlineBankingSite
{
     public class Client
     {
          public int Id { get; }
          public sprint FirstName { get; }
          ...
     }   
}

你真的认为下列内容应该合法吗?

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

尽管这两个类是相同的,但它们是两个非常不同的概念的两个完全不同的抽象。即使编译器可以很容易地找出类型定义是相同的,它也没有权利允许在两者之间进行显式或隐式转换;只有类的作者才有权允许这种转换(如果他们愿意的话),实现强制转换操作符、静态工厂方法等。

你所描述的基本上就是鸭子打字。最接近的c#等效字是"dynamic"关键字,但我不认为这正是你想要的。

正如其他人指出的那样,c#通常不遵循您所描述的类型模型,并且您可能不希望遵循它。正如InBetween的例子所示,"相同的名称"、"相同的接口"answers"相同的含义"之间存在很大的差异。

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