2010-07-17 2 views
0

Моя проблема такая. У меня есть класс XMLUtilityДолжен ли я иметь конструктор в производном классе?

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);  
      } 

     } 

и

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

     } 

и другие основные функции, такие как addSetting, removeSetting, checkSettingExists и т.д. Этот класс предоставляет функциональные возможности для очень основного файла настроек XML.

Так что теперь мне нужно немного более сложное управление настройками. Поэтому я создал другой класс и получил его из класса XMLUtility.

public class KeyPairingXML : XmlUtility 
    { 




    } 

Так моя первая мысль была мне не нужно иметь конструктор для этого класса, как это будет вызывать конструктор базовых классов. Но я был неправ.

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



     } 

Мой вопрос: верный ли код? Нужно ли мне писать весь процесс проверки внутри этого конструктора или будет обрабатываться конструктором базового класса? Правильно ли пустой блок кода?

+1

Просто примечание - вы можете опустить? true: false; из вашего метода isFilePresent() - вернуть File.Exists (FilePath + "\\" + XMLFileName); достаточно. –

+0

О да! :) Thanx для указания этого +1 –

ответ

3

Не знаю, какой язык вы используете, но для большинства (таких как Java или C#) вы можете ommit определения конструктора в производном типе, если:

  1. Базовый класс не определяет конструктор (поэтому он имеет неявный конструктор по умолчанию)
  2. Базовый класс определяет конструктор без аргументов. В этом случае он может иметь другие конструкторы, и он не изменит ничего.

Однако базовый класс определил нестандартный конструктор, поэтому вам нужно переопределить его в производном классе. У вас есть правильный код:

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

Вы также должны иметь возможность вызвать общедоступный метод в базовом классе. Вы видите какие-либо ошибки/предупреждения?

+0

Thanx! Я просто хотел знать, правильно ли написан код: :) И проблема с открытым методом была решена, поскольку я не добавил требуемую ссылку на библиотеку классов. –

Смежные вопросы