In C# you'll need conversion operators - and, in the case you mentioned, it would be an Implicit conversion.
Quoting from MSDN: "C# enables programmers to declare conversions on classes or structs so that classes or structs can be converted to and/or from other classes or structs, or basic types. Conversions are defined like operators and are named for the type to which they convert. Either the type of the argument to be converted, or the type of the result of the conversion, but not both, must be the containing type."
It would look something like this:
class Car
{
// ...other members
// User-defined conversion from TCar to Car
public static implicit operator Car(TCar d)
{
return new Car(d);
}
// User-defined conversion from Car to TCar
public static implicit operator TCar(Car d)
{
return new TCar(d);
}
}
Source: http://msdn.microsoft.com/en-us/library/09479473(v=vs.90).aspx