2010-07-17 4 views
0

Mon problème est comme ça. J'ai une classe XMLUtilityDevrais-je avoir un constructeur dans une classe dérivée?

public class XmlUtility 
    { 

     protected string FilePath; 

     protected string XMLFileName; 

     protected XmlDocument SettingsFile; 


     public XmlUtility(string inFilePath, string inXMLFileName) 
     {  

      FilePath = inFilePath; 
      XMLFileName = inXMLFileName;  

      if (isFilePresent() == false) 
      {      
       createXMLFile();     
      } 

      else 
      { 
       SettingsFile = new XmlDocument(); 
       SettingsFile.Load(FilePath + "\\" + XMLFileName);  
      } 

     } 

et

public bool isFilePresent() 
     {     
      return File.Exists(FilePath + "\\" + XMLFileName) ? true : false; 

     } 

et d'autres fonctions de base telles que addSetting, removeSetting, checkSettingExists etc. Cette classe fournit des fonctionnalités pour le fichier de paramètres xml très basique. Maintenant, j'ai besoin d'un peu plus de gestion avancée des paramètres. J'ai donc créé une autre classe et l'ai dérivée de la classe XMLUtility.

public class KeyPairingXML : XmlUtility 
    { 




    } 

Donc, ma première pensée a été que je ne pas besoin d'avoir un constructeur pour cette classe comme il appellera le constructeur de classes de base. Mais je me trompais.

public KeyPairingXML(string inFilePath, string inXMLFileName) : base(inFilePath, inXMLFileName) 
     { 



     } 

Ma question est de savoir si le code ci-dessus est correct? Ai-je besoin d'écrire tout le processus de vérification à l'intérieur de ce constructeur ou bien cela sera-t-il géré par le constructeur de la classe de base? Juste un bloc de code vide est correct?

+1

Juste une note - vous pouvez omettre le? vrai faux; de votre méthode isFilePresent() - retourne File.Exists (FilePath + "\\" + XMLFileName); est assez. –

+0

Oh oui! :) Merci de le signaler +1 –

Répondre

3

Je ne sais pas quelle langue que vous utilisez, mais pour la plupart (comme Java ou C#), vous pouvez ommettre définir un constructeur dans un type dérivé si:

  1. La classe de base ne définit pas un constructeur (donc il a un constructeur par défaut implicite)
  2. La classe de base définit un constructeur sans argument. Dans ce cas, il peut avoir d'autres constructeurs et il ne changera pas les choses

Toutefois, votre classe de base n'a défini qu'un constructeur autre que celui par défaut, vous devez donc le redéfinir dans la classe dérivée. Le code suivant est correct:

public KeyPairingXML(string inFilePath, string inXMLFileName) 
    : base(inFilePath, inXMLFileName) { 
} 

Vous devez également pouvoir appeler la méthode publique sur la classe de base. Voyez-vous des erreurs/avertissements?

+0

Merci! Je voulais juste savoir si le code que j'ai écrit est correct :) Et le problème de méthode publique a été résolu car je n'ai pas ajouté une référence requise à une bibliothèque de classes. –

Questions connexes