IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Accessibilité d'une class


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 28
    Par défaut Accessibilité d'une class
    Bonjour,

    Je débute dans la programmation en C#. Je voudrais créer une class qui ne soit pas accèssible en dehors de son namespace. Cette classe implémenterait une classe abstraite et on pourrait obtenir une instance de cette classe grâce à une factory.

    Par exemple, j'ai une classe abstraite Message, ma classe abstraite (et inaccessible en dehors du namespace) MessageImpl et une factory MessageFactory.

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Par défaut
    Il n'y a pas de visibilité au namespace en C#.

    Si une classe étend une classe abstraite ou implémente une interface, toutes les classes et interfaces doivent avoir une visibilité cohérente = une classe public ne peut pas implémenter une interface private / internal par exemple.

    Le plus simple consiste à créer une classe abstraite public et des classes dérivées public avec uniquement un constructeur internal que pourrait uniquement appeller la Factory qui se trouverait alors dans la même assembly. Par contre, il n'y a pas de moyen d'empêcher d'autres classes de dériver ta classe abstraite.

  3. #3
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu ne peux pas limiter à un namespace.

    Tu peux limiter à une assembly (internal), à une classe (private) mais pas à un namespace

  4. #4
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Une classe qui ne soit pas accessible en dehors de son namespace... C'est impossible.

    Une alternative serait de déclarer ta classe en tant que Internal dans une autre assembly.

    Plus d'info sur internal : http://msdn2.microsoft.com/fr-fr/library/7c5ka91b(VS.80).aspx

    [Edit]Vraiment pas assez rapide [/Edit]

Discussions similaires

  1. destruction d'une classe qui herite de CDialog
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 03/02/2004, 17h39
  2. Réponses: 14
    Dernier message: 15/01/2004, 01h15
  3. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28
  4. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo