Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Syntaxe pour les exceptions personnalisées

3 réponses
Avatar
Jean-Luc M.
Bonjour

Sous VS2005 express, je tape le mot exception et la génération
automatique de code me donne ça:

[global::System.Serializable]
public class MonException : Exception
{

public MonException()
{

}

public MonException(string message)
: base(message)
{

}

Toujours aussi newb', j'ai du mal à comprendre la syntaxe

public MonException(string message) : base(message)

le : base(message) , est-ce que ça veut dire que la procédure dérive
d'une procédure spécifique ? Comme MonException descend de Exception ?

--
J-L M. (Alphomega)
ICQ: 149635116
Pour m'écrire, cliquer le lien ci-dessous
http://cerbermail.com/?G5iYdBb2Ce

3 réponses

Avatar
Christophe Lephay
"Jean-Luc M." a écrit dans le message de news:

Bonjour

Sous VS2005 express, je tape le mot exception et la génération automatique
de code me donne ça:

[global::System.Serializable]
public class MonException : Exception
{

public MonException()
{

}

public MonException(string message)
: base(message)
{

}

Toujours aussi newb', j'ai du mal à comprendre la syntaxe

public MonException(string message) : base(message)

le : base(message) , est-ce que ça veut dire que la procédure dérive d'une
procédure spécifique ? Comme MonException descend de Exception ?



Non, c'est un appel explicite au constructeur. Le constructeur de la classe
de base est toujours appelé avant le constructeur de la classe dérivée.
Lorsque cet appel n'est pas spécifié, c'est le constructeur par défaut (sans
paramètres) qui est appelé. On est obligé d'expliciter l'appel au
constructeur de la classe de base dès lors qu'on veut lui transmettre un
paramètre.

Ainsi, MonException( string message ) : base( message ) indique que c'est le
constructeur de la classe de base prenant un string en paramètre qui doit
être appelé, et non le constructeur par défaut.

A contrario, dans le premier constructeur MonException(), le constructeur de
la classe de base qui sera appelé est le constructeur par défaut.
Avatar
Jean-Luc M.
>> [global::System.Serializable]





Ainsi, MonException( string message ) : base( message ) indique que c'est le
constructeur de la classe de base prenant un string en paramètre qui doit
être appelé, et non le constructeur par défaut.

A contrario, dans le premier constructeur MonException(), le constructeur de
la classe de base qui sera appelé est le constructeur par défaut.




Ok, je comprends. C'est un moyen de court-circuiter le constructeur par
défaut. Merci pour cette explication

Est-ce que je peux abuser un peu et demander une rapide explication
sur

[global::System.Serializable]

?

J'ai compris la notion de serializable, mais à nouveau la syntaxe
employée me laisse perplexe, surtout le mot global

--
J-L M. (Alphomega)
ICQ: 149635116
Pour m'écrire, cliquer le lien ci-dessous
http://cerbermail.com/?G5iYdBb2Ce
Avatar
Christophe Lephay
"Jean-Luc M." a écrit dans le message de news:

Est-ce que je peux abuser un peu et demander une rapide explication sur

[global::System.Serializable]

?

J'ai compris la notion de serializable, mais à nouveau la syntaxe employée
me laisse perplexe, surtout le mot global



J'ai découvert c# il y a peu et ne suis donc pas tout à fait certain. Ce
qu'il me *semble*, c'est que :

* les attributs entre [] sont un moyen de demander au compilateur (ou au
préprocesseur, je sais pas trop) d'ajouter du code spécifique, de manière à
rendre la classe sérialisable dans cet exemple.

Le global:: est un moyen d'éviter les conflits de namespace, en spécifiant
le namespace System depuis la "racine", comme dans l'exemple suivant :

namespace A
{
class C {}
...
}

namespace B
{
namespace A
{
class C {}
}
...
}

Si tu fais reférences à A.C dans ton namespace B, ce sera B.A.C qui sera
reférencé, tandis que global::A.C y fera reférence à celui qui est au dehors
(à vérifier - j'ai pas les moyens de le faire actuellement).