Должен ли я определенно иметь конструктор в производном классе? - PullRequest
0 голосов
/ 17 июля 2010

Моя проблема такая.У меня есть класс 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.1007 *

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

public class KeyPairingXML : XmlUtility
    {




    }

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

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



        }

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

1 Ответ

3 голосов
/ 17 июля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...