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

Delphi .NET Discussion :

Problème de dérivation d'un class abstraite


Sujet :

Delphi .NET

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 180
    Points : 107
    Points
    107
    Par défaut Problème de dérivation d'un class abstraite
    Bonjour,

    J'aimerais dériver la class FileDialog. Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    unit Class1; 
     
    interface 
     
    uses  System.Windows.Forms; 
    type  
     TClass1 = class(System.Windows.Forms.FileDialog)  
      private    
      public    
        constructor Create;  
      end; 
     
    implementation 
     
    constructor TClass1.Create;
    begin  
      inherited Create;
    end; 
     
    end.
    Sachant que la fileFialog contient etre autre ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public FileDialog = class abstract(CommonDialog)   
      strict private class constructor Create; static;   
      private constructor Create; 
    end;

    Mon problème c'est qu'avec le inherited create : Il ne trouve pas le create et dit qu'il n'existe pas vu qu'il est en private et sans le create il dit que l'objet n'est pas initialisé.
    Alors comment puis je faire?

    D'avance merci

    Ben

  2. #2
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Je crois que ce post devrait être déplacé dans la section .NET.
    -Slimjoe

  3. #3
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par the big ben 5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public FileDialog = class abstract(CommonDialog)   
      strict private class constructor Create; static;   
      private constructor Create; 
    end;
    Je ne connais pas Delphi pour .NET mais j'ai quelques connaissances POO et je ne suis pas capable d'imaginer à quoi peut bien servir un constructeur privé. Si le constructeur est privé comment est-ce que l'on construit la classe ? À la limite on le force à être hérité et on le met protected mais s'il est private je n'y comprends rien.

    C'est dans la source de Delphi ça ou si c'est toi qui a fait cette classe ?
    -Slimjoe

  4. #4
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par slimjoe
    Je ne connais pas Delphi pour .NET mais j'ai quelques connaissances POO et je ne suis pas capable d'imaginer à quoi peut bien servir un constructeur privé. Si le constructeur est privé comment est-ce que l'on construit la classe ? À la limite on le force à être hérité et on le met protected mais s'il est private je n'y comprends rien.
    Le premier constructeur est un constructeur de classe : il ne doit jamais être appelé directement, et peut donc est strict private. Le second est un constructeur d'instance, déclaré private : il est donc atteignable partout dans l'unité qui contient FileDialog.

    En revanche, si tu développes une nouvelle unité, là tu ne parviendras jamais à atteindre ce constructeur
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #5
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    merci pour l'info
    -Slimjoe

  6. #6
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par sjrd
    Le premier constructeur est un constructeur de classe : il ne doit jamais être appelé directement, et peut donc est strict private. Le second est un constructeur d'instance, déclaré private : il est donc atteignable partout dans l'unité qui contient FileDialog.

    En revanche, si tu développes une nouvelle unité, là tu ne parviendras jamais à atteindre ce constructeur
    Donc ça revient à dire qu'il est impossible d'hériter de FileDialog à moins d'écrire directement dans le unit System.Windows.Forms ?
    -Slimjoe

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par slimjoe
    Donc ça revient à dire qu'il est impossible d'hériter de FileDialog à moins d'écrire directement dans le unit System.Windows.Forms ?
    Non, seulement que ce constructeur ne sera pas accessible. Mais le constructeur hérité sera toujours disponible... Bon bien sûr pas op à la casse, mais bon
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Membre éclairé Avatar de slimjoe
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2005
    Messages : 647
    Points : 789
    Points
    789
    Par défaut
    Citation Envoyé par sjrd
    Non, seulement que ce constructeur ne sera pas accessible. Mais le constructeur hérité sera toujours disponible... Bon bien sûr pas op à la casse, mais bon

    Je suis probablement un peu imbécile () mais je ne comprends pas comment on pourra construire la classe héritée si cette dernière ne peut pas appeller le constructeur de sa superclasse. Je crois que c'est le problème à l'origine de ce post d'ailleurs, l'impossibilité de faire inherited Create dans le constructeur de la classe qui hérite.

    Comme je l'ai dit précédemment, je ne connais pas Delphi.NET mais j'aime bien apprendre .
    -Slimjoe

  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par slimjoe
    impossibilité de faire inherited Create dans le constructeur de la classe qui hérite.
    Si, c'est possible. Simplement, cela appellera le constructeur Create déclaré dans la classe parent de FileDialog...

    Il faut savoir que ce n'est pas le constructeur de TObject (Object en .NET) qui crée l'instance, mais bien le premier constructeur appelé. Les constructeurs hérités appelés récursivements ne font qu'initialiser les variables de la classe.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

Discussions similaires

  1. Problème d'héritage et de classe abstraite
    Par Guillaume1701 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 01/04/2015, 23h18
  2. Problème d'architecture sur des classes abstraites
    Par Walther Bishop dans le forum Langage
    Réponses: 2
    Dernier message: 02/10/2013, 11h26
  3. Problème d'héritage avec une classe abstraite
    Par Ph.denis dans le forum C++
    Réponses: 7
    Dernier message: 22/03/2008, 10h37
  4. Problème héritage et classes abstraites
    Par sebzinzin dans le forum Langage
    Réponses: 4
    Dernier message: 03/06/2007, 18h24
  5. [Classe abstraite] Problème de surcharge
    Par Bleys dans le forum Langage
    Réponses: 8
    Dernier message: 26/04/2007, 11h44

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