Référence circulaire en c#
badr00075
Messages postés
34
Statut
Membre
-
badr00075 -
badr00075 -
salut tout le monde
après l'exécution de mon code une référence circulaire me génère un stack overflow :
/**************** class A *******************/
public class ClasseA
{
ClasseB objB = new ClasseB();
int[] table = new int[50000];
public ClasseA()
{
TestRefCirculaire.compteur++;
ClasseB objB = new ClasseB();
}
}
/***************** class B ***********************/
public class ClasseB
{
ClasseA objA = new ClasseA();
int[] table = new int[50000];
public ClasseB()
{
TestRefCirculaire.compteur++;
ClasseA objA = new ClasseA();
}
}
/********************* TestRefCirculaire ************/
public class TestRefCirculaire
{
public static int compteur;
public TestRefCirculaire()
{
compteur = 0;
}
public static void Main(String[] args)
{
ClasseA test = new ClasseA();
}
}
tout à fais normal : c'est qui le premier ? la poule ou l'oeuf ?
est ce que quelqu'un a une idée comment on peut résoudre la référence circulaire en c# SVP ?!!!
merci d'avance et a++
après l'exécution de mon code une référence circulaire me génère un stack overflow :
/**************** class A *******************/
public class ClasseA
{
ClasseB objB = new ClasseB();
int[] table = new int[50000];
public ClasseA()
{
TestRefCirculaire.compteur++;
ClasseB objB = new ClasseB();
}
}
/***************** class B ***********************/
public class ClasseB
{
ClasseA objA = new ClasseA();
int[] table = new int[50000];
public ClasseB()
{
TestRefCirculaire.compteur++;
ClasseA objA = new ClasseA();
}
}
/********************* TestRefCirculaire ************/
public class TestRefCirculaire
{
public static int compteur;
public TestRefCirculaire()
{
compteur = 0;
}
public static void Main(String[] args)
{
ClasseA test = new ClasseA();
}
}
tout à fais normal : c'est qui le premier ? la poule ou l'oeuf ?
est ce que quelqu'un a une idée comment on peut résoudre la référence circulaire en c# SVP ?!!!
merci d'avance et a++
A voir également:
- Référence circulaire en c#
- Indice de référence des loyers - Guide
- Reference pto - Accueil - Box & Connexion Internet
- Il existe une ou plusieurs références circulaires dans lesquelles une formule fait référence ✓ - Forum Excel
- Référence circulaire dans Excel 365 - Forum Excel
- Dans le document à télécharger, les références des pièces détachées sont affichées par pays, puis par type de pièces. réorganisez le document pour avoir : les pays dans l'ordre alphabétique : allemagne, espagne, france et italie ; et pour chaque pays, les pièces d'auto, de bateau et de moto dans cet ordre. quelle est la référence de la pièce en ligne 500 ? ✓ - Forum Windows
7 réponses
concevoir les chose autrement est une bonne solution, s'il y une référence circulaire, c'est sans doute qu'il y a un problème de conception.
merci tout d'abord pour ta réponse Antisuperman !!
donc qu'est ce que tu propose comme solution ? comment pourrai je concevoir la solution à ce problème ?
donc qu'est ce que tu propose comme solution ? comment pourrai je concevoir la solution à ce problème ?
Bien là comme ça c'est difficile à dire. Tout dépends du projet.
La question est comment en es tu venu à créer une telle référence, quel est le besoin ?
Si tu peux donner plus de précision sur les besoins, et ce qui t'as amener à faire cette architecture, peut être qu'on pourra t'aider.
La question est comment en es tu venu à créer une telle référence, quel est le besoin ?
Si tu peux donner plus de précision sur les besoins, et ce qui t'as amener à faire cette architecture, peut être qu'on pourra t'aider.
hi
effectivement mon problème ou mon projet est de proposer une solution à une référence circulaire , ce n'est pas une partie d'un projet mais c'est un cas qui peut se présenter dans la conception d'un programme
so , is there any solution ????
dsl pour ce retard
effectivement mon problème ou mon projet est de proposer une solution à une référence circulaire , ce n'est pas une partie d'un projet mais c'est un cas qui peut se présenter dans la conception d'un programme
so , is there any solution ????
dsl pour ce retard
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
D'accord... Essayes alors de faire du "Lasyloading", tu charges la référence uniquement lorsqu'elle est appelée.
exemples
Je ne sais pas si tu as bien compris, mais c'est un truc dans le genre.
Comme ça lorsque tu fais un new ClassA(), tu n'as pas de stackoverflow, et tu as une référence à ClassB qui s'initialisera seulement lorsque tu fera appelle à classA.ClassB.
Bref, j'espère que ça t'aurai aidé, mais en générale, vaut mieux éviter ce genre de situation.
Bonne journée.
exemples
public class ClassA
{
private ClassB classB = null;
public ClassB ClassB
{
get{ return classB == null ? new ClassB() : classB;}
set { classB = value;}
}
}
public class ClassB
{
private ClassA classA = null;
public ClassA ClassA
{
get{ return classA == null ? new ClassA () : classA ;}
set { classA = value;}
}
}
Je ne sais pas si tu as bien compris, mais c'est un truc dans le genre.
Comme ça lorsque tu fais un new ClassA(), tu n'as pas de stackoverflow, et tu as une référence à ClassB qui s'initialisera seulement lorsque tu fera appelle à classA.ClassB.
Bref, j'espère que ça t'aurai aidé, mais en générale, vaut mieux éviter ce genre de situation.
Bonne journée.
Hi antisuperman
j'ai utilisé un compteur pour arrêter l'instanciation et annuler +/- les références du diagramme de classe .
voici la solution que j'ai réalisé :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace projet_csharp_2010
{
/**************** class A *******************/
public class ClasseA
{
int[] table = new int[50000];
public ClasseA()
{
TestRefCirculaire.compteur++;
Console.WriteLine("le compteur est à "+TestRefCirculaire.compteur);
if (TestRefCirculaire.compteur > TestRefCirculaire.a)
{
Console.WriteLine("A n'as pas été créer");
Console.WriteLine("fin du programme");
Environment.Exit(0);
}
Console.WriteLine("A a été créer ");
ClasseB objB = new ClasseB();
}
}
/***************** class B ***********************/
public class ClasseB
{
int[] table = new int[50000];
public ClasseB()
{
TestRefCirculaire.compteur++;
Console.WriteLine("le compteur est à "+TestRefCirculaire.compteur);
Console.WriteLine("B a été créer ");
ClasseA objA = new ClasseA();
}
}
/********************* TestRefCirculaire ************/
public class TestRefCirculaire
{
public static int compteur;
public static string rep;
public static int a;
public TestRefCirculaire()
{
compteur = 0;
}
public static void Main(String[] args)
{
Console.WriteLine("Entrez le nombre des instances SVP ?");
rep = Console.ReadLine();
int.TryParse(rep, out a);
a *= 2;
ClasseA test = new ClasseA();
}
}
}
j'ai utilisé un compteur pour arrêter l'instanciation et annuler +/- les références du diagramme de classe .
voici la solution que j'ai réalisé :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace projet_csharp_2010
{
/**************** class A *******************/
public class ClasseA
{
int[] table = new int[50000];
public ClasseA()
{
TestRefCirculaire.compteur++;
Console.WriteLine("le compteur est à "+TestRefCirculaire.compteur);
if (TestRefCirculaire.compteur > TestRefCirculaire.a)
{
Console.WriteLine("A n'as pas été créer");
Console.WriteLine("fin du programme");
Environment.Exit(0);
}
Console.WriteLine("A a été créer ");
ClasseB objB = new ClasseB();
}
}
/***************** class B ***********************/
public class ClasseB
{
int[] table = new int[50000];
public ClasseB()
{
TestRefCirculaire.compteur++;
Console.WriteLine("le compteur est à "+TestRefCirculaire.compteur);
Console.WriteLine("B a été créer ");
ClasseA objA = new ClasseA();
}
}
/********************* TestRefCirculaire ************/
public class TestRefCirculaire
{
public static int compteur;
public static string rep;
public static int a;
public TestRefCirculaire()
{
compteur = 0;
}
public static void Main(String[] args)
{
Console.WriteLine("Entrez le nombre des instances SVP ?");
rep = Console.ReadLine();
int.TryParse(rep, out a);
a *= 2;
ClasseA test = new ClasseA();
}
}
}