相同类型,不同命名空间
本文关键字:命名空间 同类型 | 更新日期: 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原则。话虽如此,如果在它们之间定义一个隐式转换,应该允许你或多或少地互换使用它们(尽管这样做的缺点是它可能会混淆你所指的两个对象中的哪一个;基于这个事实,我倾向于说这是一个不好的做法。