Tuesday, 15 November 2011

operator, implicit, explicit

'operator' keyword is used to overload a built-in operator or user defined conversions[straight from msdn].

A simple example.....

public class Money
    {
        public Money():this(0, "GBP")
        {
        }

        public Money(double value):this(value, "GBP")
        { }

        public Money(double value, string currency)
        {
            this.Value = value;
            this.Currency = currency;
        }

        public double Value { get; set; }

        public string Currency { get; set; }

        public override string ToString()
        {
            return Value.ToString() + Currency;
        }

        public static Money operator +(Money arg1, Money arg2)
        {
            if (arg1.Currency.Equals(arg2.Currency))
            {
                return new Money(arg1.Value + arg2.Value, arg1.Currency);
            }

            return null;
        }

        public static Money operator -(Money arg1, Money arg2)
        {
            if (arg1.Currency.Equals(arg2.Currency))
            {
                return new Money(arg1.Value - arg2.Value, arg1.Currency);
            }

            return null;
        }

        public static explicit operator double(Money money)
        {
            return money.Value;
        }

        public static implicit operator Money(double value)
        {
            return new Money(value);
        }
    }
------------------------------------------------

static void Main(string[] args)
{
            Money money1 = new Money(10.50);
            Money money2 = new Money(21.50);
            Money money3 = 23.50;

            Console.WriteLine((money1 + 10.50).ToString());
            Console.WriteLine((money1 + money2).ToString());
            Console.WriteLine((money2 - money1).ToString());
            Console.WriteLine((double)money1);
            Console.WriteLine(money3);
}

outputs

21GBP
32GBP
11GBP
10.5
23.5GBP
Press any key to continue . . .

No comments: