我应该在派生类中确实有一个构造函数吗?

时间:2010-07-17 19:01:37

标签: oop constructor overloading derived-class base-class

我的问题是这样的。我有一个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 个答案:

答案 0 :(得分:3)

不确定您使用的是哪种语言,但对于大多数语言(例如Java或C#),您可以在以下情况下省略在派生类型中定义构造函数:

  1. 基类未定义构造函数(因此它具有隐式默认构造函数)
  2. 基类定义了无参构造函数。在这种情况下,它可以有其他构造函数,它不会改变事物
  3. 但是,您的基类只定义了一个非默认构造函数,因此您需要在派生类中重新定义它。您拥有的以下代码是正确的:

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

    您还应该能够在基类上调用public方法。您是否看到任何错误/警告?