Désolé pour beaucoup de code à lire. C'est le moyen le plus simple de montrer le problème.Exception de constructeur de sous-classe quitte l'instance de la classe parente
using System;
using System.Collections.Generic;
namespace P1
{
class A
{
static Dictionary<int, A> a = new Dictionary<int, A>();
static int i = 0;
int id;
public A()
{
id = ++i;
a[id] = this;
}
public static int Count() { return a.Count; }
}
class B : A
{
public B()
{
throw new Exception();
}
}
class Program
{
static void Main(string[] args)
{
try
{
var b = new B();
}
catch
{
// What should be here ????
}
Console.WriteLine(A.Count()); //prints 1 - not good
Console.ReadKey();
}
}
}
Quelqu'un peut-il suggérer une logique de nettoyage pour le cas où le constructeur de sous-classe échoue?
Cela dépend. Votre programme peut-il récupérer d'une manière ou d'une autre si le constructeur de 'B' échoue? Pourquoi "1" "n'est pas bon"? –
Même si b échoue, l'instance d'un reste, et je ne sais pas comment l'enlever. – Marko
@Marko: si vous souhaitez séparer le souci de la création d'objet du souci d'insertion d'objet dans le dictionnaire, alors cette question ne se posera pas. –