2016-08-18 8 views
-3

私は全く同じタイプを使用して、エンティティをDTOに変換しようとしています。両方の型(クラス)は、異なる名前空間にある点を除いて全く同じです。同じタイプで、異なる名前空間。

他の名前空間のいずれかを参照するときにキャストする必要がありますか?

VSは、異なるファイルでも同じですが、VSが自動的に認識し認識する必要がありますか?

おかげ

+0

異なる名前空間=異なるタイプ。 VSはこの場合、あなたの意図を自動的に把握することはできません。コンバージョン/キャスト演算子を用意する必要があります。 [C#変換演算子](https://msdn.microsoft.com/en-us/library/85w54y0a.aspx)を参照してください – CoolBots

+0

これを試してみてください。答えがわかります... –

+1

質問の問題あなたが尋ねるべきことを前提としているということです。名前空間が異なる2つの型は、異なる名前空間にある*ためです。 2つのタイプが「同じだが異なる名前空間にある」という考えは、自己矛盾している。 –

答えて

1
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; } 
      ... 
    } 
} 

あなたは本当に、次は合法であるべきだと思いますか?両方のクラスAllthough

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

それらは2つの非常に異なる概念の2つの完全に異なる抽象化で同一です。たとえコンパイラが型定義が同じであることを容易に理解できるとしても、型定義が明示的または暗黙的に変換できるようにする権利はありません。クラスの作成者だけが、キャスト演算子、静的なファクトリメソッドまたは何を持っているかを望むならば、その変換を許可する権利を持っています。

1

基本的には、duck typingです。 C#に最も近いのは "動的な"キーワードですが、私はそれがあなたが求めているものではないと思います。他の人が指摘したように

、C#がない、一般的に、あなたが説明してきたタイピングモデルに従うと、あなたはおそらくそれがにしたくないを行います。 InBetweenの例が示すように、 "同名"、 "同じインターフェース"、 "同じの意味はの間に大きな違いがあります。"

質問に直接答えるには、まず、別の名前空間に2つの同一のクラスを持つことについての真剣な質問に真剣に疑問を投げかけます。つまり、Don't Repeat Yourselfプリンシパルのかなりの違反のようです。それは、あなたがそれらを多かれ少なかれ相互に使用できるようにするべきである間の暗黙的な変換を定義するなら(言いたい2つのオブジェクトのどれを混乱させるかもしれないという欠点がありますが;それはその事実に基づいて悪い習慣だということです)。

関連する問題