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 ...
}
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
"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" <ShadowFil@discussions.microsoft.com> a écrit dans le message de
news: 1482D09E-96A9-4212-98A4-610D7F94865F@microsoft.com...
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 ...
}
}
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.
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.
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" <ShadowFil@discussions.microsoft.com> wrote in message
news:1482D09E-96A9-4212-98A4-610D7F94865F@microsoft.com...
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 ...
}
}
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.
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
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.
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
.
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
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.
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.