/// <summary>
        /// Initializes a new instance of the <see cref="Residential" /> class.
        /// </summary>
        /// <param name="vintage">Text for the vintage of the template system. This will be used to set efficiencies for various pieces of equipment within the system. Further information about these defaults can be found in the version of ASHRAE 90.1 corresponding to the selected vintage. Read-only versions of the standard can be found at: https://www.ashrae.org/technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards.</param>
        /// <param name="equipmentType">Text for the specific type of system equipment from the ResidentialEquipmentType enumeration..</param>
        /// <param name="identifier">Text string for a unique object ID. This identifier remains constant as the object is mutated, copied, and serialized to different formats (eg. dict, idf, osm). This identifier is also used to reference the object across a Model. It must be &lt; 100 characters, use only ASCII characters and exclude (, ; ! \\n \\t). (required).</param>
        /// <param name="displayName">Display name of the object with no character restrictions..</param>
        public Residential
        (
            string identifier,                                                                                                                                                       // Required parameters
            string displayName = default, Vintages vintage = Vintages.ASHRAE_2013, ResidentialEquipmentType equipmentType = ResidentialEquipmentType.ResidentialAC_ElectricBaseboard // Optional parameters
        ) : base(identifier: identifier, displayName: displayName)                                                                                                                   // BaseClass
        {
            this.Vintage       = vintage;
            this.EquipmentType = equipmentType;

            // Set non-required readonly properties with defaultValue
            this.Type = "Residential";
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="Residential" /> class.
        /// </summary>
        /// <param name="vintage">Text for the vintage of the template system. This will be used to set efficiencies for various pieces of equipment within the system. Further information about these defaults can be found in the version of ASHRAE 90.1 corresponding to the selected vintage. Read-only versions of the standard can be found at: https://www.ashrae.org/technical-resources/standards-and-guidelines/read-only-versions-of-ashrae-standards.</param>
        /// <param name="equipmentType">Text for the specific type of system equipment from the ResidentialEquipmentType enumeration..</param>
        /// <param name="identifier">Text string for a unique object ID. This identifier remains constant as the object is mutated, copied, and serialized to different formats (eg. dict, idf, osm). This identifier is also used to reference the object across a Model. It must be &lt; 100 characters, use only ASCII characters and exclude (, ; ! \\n \\t). (required).</param>
        /// <param name="displayName">Display name of the object with no character restrictions..</param>
        /// <param name="userData">Optional dictionary of user data associated with the object.All keys and values of this dictionary should be of a standard data type to ensure correct serialization of the object (eg. str, float, int, list)..</param>
        public Residential
        (
            string identifier,                                                                                                                                                                                  // Required parameters
            string displayName = default, Object userData = default, Vintages vintage = Vintages.ASHRAE_2019, ResidentialEquipmentType equipmentType = ResidentialEquipmentType.ResidentialAC_ElectricBaseboard // Optional parameters
        ) : base(identifier: identifier, displayName: displayName, userData: userData)                                                                                                                          // BaseClass
        {
            this.Vintage       = vintage;
            this.EquipmentType = equipmentType;

            // Set non-required readonly properties with defaultValue
            this.Type = "Residential";

            // check if object is valid, only check for inherited class
            if (this.GetType() == typeof(Residential))
            {
                this.IsValid(throwException: true);
            }
        }