Il est dit que la classe Derived ne devrait pas lancer d'exception qui ne soit pas connue par la classe Base, j'essaie de trouver comment son travail, dans la classe de base, lance System.Exception et Derived Je lance ArgNullException(). Quelqu'un peut-il expliquer est cela est bien beauPrincipe de substitution liskov et gestion des exceptions
class b
{
virtual public void foo()
{
try
{
if (true)
throw new System.Exception();
}
catch (Exception ex)
{
Console.WriteLine("in base");
}
}
}
class a : b
{
override public void foo()
{
try
{
if (true)
throw new ArgumentNullException();
}
catch (Exception ex)
{
Console.WriteLine("in dervied");
}
}
}
Exception lancée par la classe de base devrait être une SubType d'exceptions lancées par la classe super. Votre exemple ne lance même pas d'exception (parce que le bloc catch est bloqué). – aknon