Casting Between Data Types in C#

c#, casting, generics, object, types

Solution

Yes, this is possible using C# operator overloading. There are two versions explicit and implicit.

Here is a full example:

class Program
{
    static void Main(string[] args)
    {
        A a1 = new A(1);
        B b1 = a1;

        B b2 = new B(1.1);
        A a2 = (A)b2;
    }
}

class A
{
    public int Foo;

    public A(int foo)
    {
        this.Foo = foo;
    }

    public static implicit operator B(A a)
    {
        return new B(a.Foo);
    }
}

class B
{
    public double Bar;

    public B(double bar)
    {
        this.Bar = bar;
    }

    public static explicit operator A(B b)
    {
        return new A((int)b.Bar);
    }
}

Type A can be cast implicitly to type B but type B must be cast explicitly to type A.

Problem

I have (for example) an object of type A that I want to be able to cast to type B (similar to how you can cast an `int` to a `float`) Data types A and B are my own. Is it possible to define the rules by which this casting occurs? Example ``` int a = 1; float b = (float)a; int c = (int)b; ```

Original source