【发布时间】:2011-02-27 17:23:45
【问题描述】:
几天前我开始使用 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));
}
}
}
在阅读了 Dirk Louis 和 Shinja Strasser 的“Microsoft Visual C# 2008”一书中关于运算符重载的章节后,我尝试编写一个自己的示例。
也许有人知道出了什么问题。
谢谢。
【问题讨论】:
-
您的 Main 位于 Operators 类中,这是您故意要做的吗?
-
只是好奇......为什么接受的答案从我的变成好奇的极客?一般规则是将提供有效解决方案的第一个答案标记为已接受。
标签: c# overloading stack-overflow operator-keyword