J'ai commencé à programmer avec C# il y a quelques jours.La surcharge de l'opérateur provoque un débordement de la pile
Maintenant, une erreur de confusion est apparue lors d'un jeu avec surcharge de l'opérateur.
Le code suivant produit un StackOverflowException lors de l'exécution:
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));
}
}
}
J'ai essayé d'écrire un propre exemple après avoir lu le chapitre sur operater surcharge du livre "Microsoft Visual C# 2008" de Dirk Louis et Shinja Strasser.
Peut-être que quelqu'un a une idée de ce qui ne va pas.
Merci.
où se produit l'erreur? –
votre Main est dans la classe des Opérateurs, est-ce quelque chose que vous vouliez faire exprès? –
Juste curieux ... pourquoi la réponse acceptée passe-t-elle de la mienne à la geek curieuse? Les règles générales doivent marquer la première réponse qui a fourni une solution de travail acceptée. –