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 :

Hériter de SaveProgressEventArgs


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 011
    Par défaut Hériter de SaveProgressEventArgs
    Bonjour,

    Je cherche à hériter de la classe SaveProgressEventArgs définie dans Ionic.Zip.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class MySaveProgressEventArgs : SaveProgressEventArgs 
    {
        //public Boolean Test { get; set; }
    }
    Erreur :
    The type 'Ionic.Zip.SaveProgressEventArgs' has no constructors defined
    L'héritage n'est peut-être pas la bonne solution.

    Le but est d'avoir une librairie "L" qui encapsule Ionic.Zip.
    Et je cherche un moyen de profiter de l'événement SaveProgress sans avoir à déclarer Ionic.Zip dans une Form (puisqu'on est sensé utiliser la librairie "L").

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Pas possible d'hériter de SaveProgressEventArgs, ni même de sa classe de base ZipProgressEventArgs car leurs constructeurs sont déclarés comme internal. Donc à partir du moment où tu te situes dans un autre assembly tu ne pourras pas utiliser l'héritage, ni même utiliser une instance (sauf vide avec SaveProgressEventArgs.Empty).

    La seule solution c'est de modifier l'accessibilité de ce dont tu as besoin, mais pour cela il faudra télécharger, modifier puis recompiler le code source de la librairie.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 011
    Par défaut
    Citation Envoyé par DotNetMatt
    La seule solution c'est de modifier l'accessibilité de ce dont tu as besoin, mais pour cela il faudra télécharger, modifier puis recompiler le code source de la librairie
    C'est la seule solution pour l'héritage ou la seule solution tout court ?
    Pour rappel, le but est d'avoir une librairie "L" qui encapsule Ionic.Zip et de profiter de l'événement SaveProgress sans avoir à déclarer Ionic.Zip dans une Form (puisqu'on est sensé utiliser la librairie "L").

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    tu peux recréer ta propre classe d'évènement, évitant aussi de référencer l'autre dll
    (et genre quand tu recois l'event de base tu déclenches ton event avec ton propre eventargs)
    le tout sans héritage (mais en effet l'héritage aurait été la solution avec peu de code)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 011
    Par défaut
    Cela fonctionne parfaitement.

    La solution :
    Code C# : 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    using System;
    using System.Globalization;
    using System.IO;
    using Ionic.Zip;
     
    namespace X.Library.Zip
    {
     
        public delegate void ZipSaveProgressEventHandler(Object sender, ZipSaveProgressEventArgs e);
     
        public class ZipSaveProgressEventArgs : ZipProgressEventArgs 
        {
            int entries;
            public int EntriesSaved {
                get { return entries; }
            }
     
            public ZipSaveProgressEventArgs(int entriesSaved) { entries = entriesSaved; }   
        }
     
        public class ZipProgressEventArgs : EventArgs
        {
            public string ArchiveName { get; set; }
            public long BytesTransferred { get; set; }
            public bool Cancel { get; set; }
            public ZipEntry CurrentEntry { get; set; }
            public int EntriesTotal { get; set; }
            public ZipProgressEventType EventType { get; set; }
            public long TotalBytesToTransfer { get; set; }
        }
     
        public class ZipHelper
        {
            public static event ZipSaveProgressEventHandler ZipSaveProgress;
     
            protected static void OnSaveProgress(ZipSaveProgressEventArgs e)
            {
                if (ZipSaveProgress != null)
                    ZipSaveProgress(null, e);
            }
     
            public static Boolean AddDirectoriesToExistingZip(String[] directories, String zipFileName, ZipSaveProgressEventHandler progressEvent)
            {
                try
                {
                    using (ZipFile zip = ZipFile.Read(zipFileName))
                    {
                        // Ce commentaire remplace du code qui n'apporte rien au sujet
     
                        if (progressEvent != null)
                            ZipSaveProgress = progressEvent;
     
                        zip.SaveProgress += DoZipSaveProgress;
                        zip.Save();
                    }
     
                    return true;
                }
                catch (Exception)
                {
                    return false;
                }     
            }
     
            public static void DoZipSaveProgress(Object sender, SaveProgressEventArgs e)
            {
                ZipSaveProgressEventArgs e2 = new ZipSaveProgressEventArgs(e.EntriesSaved);
                e2.ArchiveName = e.ArchiveName;
                e2.BytesTransferred = e.BytesTransferred;
                e2.Cancel = e.Cancel;
                e2.CurrentEntry = e.CurrentEntry;
                e2.EntriesTotal = e.EntriesTotal;
                e2.EventType = e.EventType;
                e2.TotalBytesToTransfer = e.TotalBytesToTransfer;
     
                OnSaveProgress(e2);
            }
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Héritage] Hériter de TextComponent impossible
    Par soad dans le forum Composants
    Réponses: 6
    Dernier message: 01/12/2005, 08h02
  2. Hériter de TList
    Par NotANumber dans le forum Langage
    Réponses: 10
    Dernier message: 23/11/2005, 18h35
  3. Hériter de TList
    Par NotANumber dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 22/11/2005, 18h03
  4. Réponses: 2
    Dernier message: 05/07/2005, 18h22
  5. Réponses: 7
    Dernier message: 25/03/2005, 14h05

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