title: How to control Type conversion in C#
body: <p>Is there a way to control the type conversion in C#? So for example, if I have two types with essentially the same details, but one is used for the internal working of my application and the other is a DTO used for communicating with non-.Net applications:</p>
  
  <pre><code>public sealed class Player
  {
    public Player(string name, long score)
    {
      Name = name;
      Score = score;
      ID = Guid.NewGuid();
    }
  
    public string Name { get; private set; }
  
    public Guid ID { get; private set; }
  
    public long Score { get; private set; }
  }
  
  public sealed class PlayerDTO
  {
    public PlayerDTO(string name, long score, string id)
    {
      Name = name;
      Score = score;
      ID = id;
    }
  
    public string Name { get; private set; }
  
    // the client is not .Net and doesn't have Guid
    public string ID { get; private set; }  
  
    public long Score { get; private set; }
  }
  </code></pre>
  
  <p>Right now, I need to create a new instance of PlayerDTO from my Player instance every time and I'm looking for a better, cleaner way of doing this.
  One idea I had was to add an AsPlayerDTO() method to the player class, but would be nice if I can control the type conversion process so I can do this instead:</p>
  
  <pre><code>var playerDto = player as PlayerDTO; 
  </code></pre>
  
  <p>Anyone know if this is possible and how I might be able to do it?</p>
  
  <p>Thanks,</p>