Перегрузка оператора вызывает переполнение стека

Я начал программировать на C # несколько дней назад.

Теперь возникла сбивающая с толку ошибка при игре с перегрузкой операторов.

Следующий код создает StackOverflowException при запуске:

using System;

namespace OperatorOverloading
{
    public class Operators
    {
        // Properties
        public string text
        {
            get
            {
                return text;
            }

            set
            {
                if(value != null)
                    text = value;
                else
                    text = "";
            }
        }

        // Constructors
        public Operators() : this("")
        {
        }

        public Operators(string text)
        {
            // Use "set" property.
            this.text = text;
        }

        // Methods
        public override string ToString()
        {
            return text;
        }

        // Operator Overloading
        public static string operator +(Operators lhs, Operators rhs)
        {
            // Uses properties of the passed arguments.
            return lhs.text + rhs.text;
        }

        public static void Main(string[] args)
        {
            Operators o1 = new Operators();
            Operators o2 = new Operators("a");
            Operators o3 = new Operators("b");

            Console.WriteLine("o1: " + o1);
            Console.WriteLine("o2: " + o2);
            Console.WriteLine("o3: " + o3);

            Console.WriteLine();

            Console.WriteLine("o1 + o2: " + (o1 + o2));
            Console.WriteLine("o2 + o3: " + (o2 + o3));
        }
    }
}

Я попытался написать собственный пример после прочтения главы о перегрузке операторов из книги «Microsoft Visual C # 2008» от Дирка Луиса и Шинджи Штрассер.

Может быть, у кого-то есть ключ к разгадке. что не так.

Спасибо.

5
задан Amar Palsapure 7 February 2012 в 14:26
поделиться