OVH Cloud OVH Cloud

Méthodes scellée

6 réponses
Avatar
ShadowFil
Bonjour,

Comment faire pour avoir une méthode scellée qui implémente une méthode
d'une interface ?

Exemple :
La compilation échoue pour la méthode MyAbstractClass.Traitement()
ci-dessous car le mot clé "sealed" est utilisé sur une méthode non-substituée.

interface IMyInterface
{
Traitement();
}

public abstract class MyAbstractClass : IMyInterface
{
public sealed Traitement()
{
SpecificTratement();
}

protected abstract SpecificTratement();
}

public class MySpecificClass : MyAbstractClass
{
protected SpecificTratement()
{
// Traitement Spécique ...
}
}

Merci de votre aide.

6 réponses

Avatar
Bruno Jouhier [MVP]
"sealed" ne s'applique qu'au niveau classe.

Contrairement à Java où les méthodes sont virtuelles par défaut et où il
faut les qualifier avec "final" pour les sceller, en C#, elles sont scellées
par défaut et il faut les qualifier avec "virtual" pour les rendre
virtuelles.

Bruno.

"ShadowFil" a écrit dans le message de
news:
Bonjour,

Comment faire pour avoir une méthode scellée qui implémente une méthode
d'une interface ?

Exemple :
La compilation échoue pour la méthode MyAbstractClass.Traitement()
ci-dessous car le mot clé "sealed" est utilisé sur une méthode
non-substituée.

interface IMyInterface
{
Traitement();
}

public abstract class MyAbstractClass : IMyInterface
{
public sealed Traitement()
{
SpecificTratement();
}

protected abstract SpecificTratement();
}

public class MySpecificClass : MyAbstractClass
{
protected SpecificTratement()
{
// Traitement Spécique ...
}
}

Merci de votre aide.


Avatar
Lloyd Dupont
t'as pas besoin de sealed, les methode ne sont PAS virtuelle par defaut.
comme tu ne fais aucun override, tu n'as pas besoin de sealed, hey;)

t'as methode peut-etre surcharger SEULEMENT si tu lui met l'attribut
virtual, autrement c'est comme si elle etait sealed!

"ShadowFil" wrote in message
news:
Bonjour,

Comment faire pour avoir une méthode scellée qui implémente une méthode
d'une interface ?

Exemple :
La compilation échoue pour la méthode MyAbstractClass.Traitement()
ci-dessous car le mot clé "sealed" est utilisé sur une méthode
non-substituée.

interface IMyInterface
{
Traitement();
}

public abstract class MyAbstractClass : IMyInterface
{
public sealed Traitement()
{
SpecificTratement();
}

protected abstract SpecificTratement();
}

public class MySpecificClass : MyAbstractClass
{
protected SpecificTratement()
{
// Traitement Spécique ...
}
}

Merci de votre aide.


Avatar
Zazar
Bonsoir,

"sealed" ne s'applique qu'au niveau classe.



Ca peut aussi s'appliquer à une méthode qui substitue une méthode
virtuelle. Mais effectivement dans le cas de l'OP, ça ne sert à rien.


--
Zazar
Avatar
Bruno Jouhier [MVP]
"Zazar" a écrit dans le message
de news: %
Bonsoir,

"sealed" ne s'applique qu'au niveau classe.



Ca peut aussi s'appliquer à une méthode qui substitue une méthode
virtuelle. Mais effectivement dans le cas de l'OP, ça ne sert à rien.



Merci pour l'info. Je n'avais pas vu ça. On peut donc faire un "sealed
override".



--
Zazar




Avatar
non, sealed signifie sealed.
On ne peut faire override que sur qchose de virtual



-----Original Message-----
"Zazar" a


écrit dans le message
de news: %
Bonsoir,

"sealed" ne s'applique qu'au niveau classe.



Ca peut aussi s'appliquer à une méthode qui substitue




une méthode
virtuelle. Mais effectivement dans le cas de l'OP, ça




ne sert à rien.

Merci pour l'info. Je n'avais pas vu ça. On peut donc


faire un "sealed
override".



--
Zazar






.



Avatar
Zazar
Bonsoir,

non, sealed signifie sealed.
On ne peut faire override que sur qchose de virtual


Pareil pour sealed : Ce mot clef appliqué à une méthode signifie que les
classes dérivées n'auront pas le droit de la substituer. Il n'a donc de sens
que sur une une méthode virtuelle.

public class C1 : I1 {
//déclaration d'un méthode virtuelle
public virtual void MyMethod() { }
}

public class C2 : C1 {
//on substitue la méthode en question : on a le droit puisqu'elle est
virtuelle
//on décrête que dorénavant la méthode ne pourra plus être subtituée
public sealed override void MyMethod() {
}
}

public class C3 : C2 {
//Erreur MyMethod() ne peut pas être substituée
public override void MyMethod() {
}
}


De plus, "sealed virtual" étant un non sens, on ne pourra retrouver le
mot-clef sealed appliqué à une méthode que s'il est accompagné du mot-clef
override. Bruno a donc raison.

--
Zazar