OVH Cloud OVH Cloud

Cacher des membres venant de l'héritage.

6 réponses
Avatar
WAUQUIER Frédéric
Bonjour,

Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant de
la classe hérité.

Exemple :

public class A
public VarA as integer
public VarB as integer
public Sub A()
....
end sub
public sub B()
....
end sub
end class

public class C
inherits A
...
end class

Je souhaite ne plus voir la procédure B et le variable VarB lorsque
j'instancie la classe C.
Je n'est pas access au source de la classe C (donc pas possible de les
mettre en private.)

Est ce que quelqu'un a une idée ?

Merci

WAUQUIER Frédéric
IT Manager

6 réponses

Avatar
Guy DETIENNE
Salut ;O)

Tu es dans le mauvais groupe. Ici c'est VB6 et versions antérieures.

Vois plutôt dans le groupe
microsoft.public.fr.dotnet.vb

Guy

"WAUQUIER Frédéric" a écrit dans le message de
news:%
Bonjour,

Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant


de
la classe hérité.

Exemple :

public class A
public VarA as integer
public VarB as integer
public Sub A()
....
end sub
public sub B()
....
end sub
end class

public class C
inherits A
...
end class

Je souhaite ne plus voir la procédure B et le variable VarB lorsque
j'instancie la classe C.
Je n'est pas access au source de la classe C (donc pas possible de les
mettre en private.)

Est ce que quelqu'un a une idée ?

Merci

WAUQUIER Frédéric
IT Manager




Avatar
James RAVAILLE
Bonjour,

Vous n'avez pas aux sources de la classe A ou de la classe C ?

Si c'est la classe C, alors mettre en private les attributs et méthodes dans
la classe A...

Si c'est la classe A, alors vous pouvez toujours masquer la méthode en la
définissant shadows dans la classe C, et l'implémenter en levant une
exception avec un message d'erreur spécifique... Mais j'avoue que ce n'est
pas très propre (la méthode devient en quelque sorte abstraite)...


Cordialement,

--
James RAVAILLE.
MCAD .NET et MCT .NET
http://www.certifdotnet.com



"WAUQUIER Frédéric" a écrit dans le message de
news: %
Bonjour,

Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant
de la classe hérité.

Exemple :

public class A
public VarA as integer
public VarB as integer
public Sub A()
....
end sub
public sub B()
....
end sub
end class

public class C
inherits A
...
end class

Je souhaite ne plus voir la procédure B et le variable VarB lorsque
j'instancie la classe C.
Je n'est pas access au source de la classe C (donc pas possible de les
mettre en private.)

Est ce que quelqu'un a une idée ?

Merci

WAUQUIER Frédéric
IT Manager



Avatar
Guy DETIENNE
Désolé, c'est qui moi étais dans le mauvais groupe ;O). A force de swaper
entre les écrans.

Guy


"Guy DETIENNE" a écrit dans le message de
news:
Salut ;O)

Tu es dans le mauvais groupe. Ici c'est VB6 et versions antérieures.

Vois plutôt dans le groupe
microsoft.public.fr.dotnet.vb

Guy

"WAUQUIER Frédéric" a écrit dans le message


de
news:%
> Bonjour,
>
> Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant
de
> la classe hérité.
>
> Exemple :
>
> public class A
> public VarA as integer
> public VarB as integer
> public Sub A()
> ....
> end sub
> public sub B()
> ....
> end sub
> end class
>
> public class C
> inherits A
> ...
> end class
>
> Je souhaite ne plus voir la procédure B et le variable VarB lorsque
> j'instancie la classe C.
> Je n'est pas access au source de la classe C (donc pas possible de les
> mettre en private.)
>
> Est ce que quelqu'un a une idée ?
>
> Merci
>
> WAUQUIER Frédéric
> IT Manager
>
>




Avatar
Thierry
Ca, c'est plutot un problème de conception... Pas très logique de voiloir
masquer des membres publics de la classe parent.
tu as essayé de déclarer tes méthodes ou propriétés plutot en protected ?
Cela permet de les rendre uniquement accessible aux classes enfants.

"WAUQUIER Frédéric" a écrit dans le message de
news: #
Bonjour,

Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant


de
la classe hérité.

Exemple :

public class A
public VarA as integer
public VarB as integer
public Sub A()
....
end sub
public sub B()
....
end sub
end class

public class C
inherits A
...
end class

Je souhaite ne plus voir la procédure B et le variable VarB lorsque
j'instancie la classe C.
Je n'est pas access au source de la classe C (donc pas possible de les
mettre en private.)

Est ce que quelqu'un a une idée ?

Merci

WAUQUIER Frédéric
IT Manager




Avatar
James RAVAILLE
Bonjour,

C'est sûr que c'est plus propre...

Mais je crois qu'il ne peut plus mettre les attributs et méthodes protected,
car il n'a plus les sources de la classe de base...


Cordialement,

--
James RAVAILLE.
MCAD .NET et MCT .NET
http://www.certifdotnet.com


"Thierry" a écrit dans le message de news:

Ca, c'est plutot un problème de conception... Pas très logique de voiloir
masquer des membres publics de la classe parent.
tu as essayé de déclarer tes méthodes ou propriétés plutot en protected ?
Cela permet de les rendre uniquement accessible aux classes enfants.

"WAUQUIER Frédéric" a écrit dans le message
de
news: #
Bonjour,

Sous VB.Net 2005, je cherche à cacher des membres de la classe provenant


de
la classe hérité.

Exemple :

public class A
public VarA as integer
public VarB as integer
public Sub A()
....
end sub
public sub B()
....
end sub
end class

public class C
inherits A
...
end class

Je souhaite ne plus voir la procédure B et le variable VarB lorsque
j'instancie la classe C.
Je n'est pas access au source de la classe C (donc pas possible de les
mettre en private.)

Est ce que quelqu'un a une idée ?

Merci

WAUQUIER Frédéric
IT Manager








Avatar
Ambassadeur Kosh
public class A
{
public void f() ...
public int h() ...
public int g { get ... set ... }
}

une (bonne) façon de faire

public class B
{
private A rep = new A() ;

private void f() { rep.f() ; }
protected int h() { return rep.h() ; } ;
public int g { get { return rep.g ; }; set { rep.g = value ; } }
}

si vous devez avoir B inherit A, alors ça n'est tout simplement pas serieux.
si toutefois, vous avez un besoin similaire à celui des interfaces
(mécanisme implicit explicit), pour spécialiser le contrat

public class C : ICloneable
{
// masqué
object ICloneable.Clone()
{
return this.Clone() ;
}

// visible et plus sympathique
public C Clone()
}

alors, utilisez shadow, mais c'est prendre une mauvaise pente : celle de
l'heritage d'implantation. ça va trés vite devenir le foutoir, et la porte
ouverte à l'incohérence.
"certes, mais les abstract class", me direz vous. je vous renvoie sur ce
forum à une discussion sur la différence entre abstract class et interface.

voila voila