Operator overloading

We can extend the meaning of an existing operator by overloading it.

For example, C# overloads the + to do the string concatenation.

The following operators are overloadable:

To implement operators, define static methods to overload the operator.

The following fragment shows a method that implements the addition operator (+) for adding two instances of the type Text:


public static Text operator +(Text t1, Text t2)

The following declares a method that overrides the operator for adding Text and an int:


public static Text operator +(Text w, int i)

We can use the operator like this:


Text newText = text1 + 1;

Note that the order of the arguments is important.

The fragment defines the behavior for a Text + int operation, but not int + Text.

We would need to define another method to support both orderings.

The following code overloads the + operator:


using System;
using System.IO;
public struct MyValue
{
    int value;
    public MyValue(int semitonesFromA) { value = semitonesFromA; }
    public static MyValue operator +(MyValue x, int semitones)
    {
        return new MyValue(x.value + semitones);
    }
}


class Test
{
    static void Main()
    {
        MyValue B = new MyValue(2);

        MyValue C = B + 2;

    }
}

The following example defines the type Text, which has two overridden addition operators:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Dynamic;

public class Text
{
    public string MyString
    {
        get;
        set;
    }

    public static string operator +(Text w1, Text w2)
    {
        return w1.MyString + " " + w2.MyString;
    }

    public static Text operator +(Text w, int i)
    {
        return new Text() { MyString = w.MyString + i.ToString() };
    }

    public override string ToString()
    {
        return MyString;
    }
}

public class MainClass
{
    static void Main(string[] args)
    {
        Text word1 = new Text() { MyString = "Hello" };
        Text word2 = new Text() { MyString = "World" };

        Console.WriteLine("Word1: {0}", word1);
        Console.WriteLine("Word2: {0}", word2);
        Console.WriteLine("Added together: {0}", word1 + word2);
        Console.WriteLine("Added with int: {0}", word1 + 7);

    }
}

The output:


Word1: Hello
Word2: World
Added together: Hello World
Added with int: Hello7
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.