/// <summary>
        /// Initializes a new instance of the <see cref="ConstructionSet" /> class.
        /// </summary>
        /// <param name="wallSet">A WallConstructionSet object for this ConstructionSet..</param>
        /// <param name="floorSet">A FloorConstructionSet object for this ConstructionSet..</param>
        /// <param name="roofCeilingSet">A RoofCeilingConstructionSet object for this ConstructionSet..</param>
        /// <param name="apertureSet">A ApertureConstructionSet object for this ConstructionSet..</param>
        /// <param name="doorSet">A DoorConstructionSet object for this ConstructionSet..</param>
        /// <param name="shadeConstruction">A ShadeConstruction to set the reflectance properties of all outdoor shades of all objects to which this ConstructionSet is assigned..</param>
        /// <param name="airBoundaryConstruction">An AirBoundaryConstruction to set the properties of Faces with an AirBoundary type..</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 ConstructionSet
        (
            string identifier,                                                                                                                                                                                                                                                                                                                                                // Required parameters
            string displayName = default, WallConstructionSet wallSet = default, FloorConstructionSet floorSet = default, RoofCeilingConstructionSet roofCeilingSet = default, ApertureConstructionSet apertureSet = default, DoorConstructionSet doorSet = default, ShadeConstruction shadeConstruction = default, AirBoundaryConstruction airBoundaryConstruction = default // Optional parameters
        ) : base(identifier: identifier, displayName: displayName)                                                                                                                                                                                                                                                                                                            // BaseClass
        {
            this.WallSet                 = wallSet;
            this.FloorSet                = floorSet;
            this.RoofCeilingSet          = roofCeilingSet;
            this.ApertureSet             = apertureSet;
            this.DoorSet                 = doorSet;
            this.ShadeConstruction       = shadeConstruction;
            this.AirBoundaryConstruction = airBoundaryConstruction;

            // Set non-required readonly properties with defaultValue
            this.Type = "ConstructionSet";
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="ConstructionSet" /> class.
        /// </summary>
        /// <param name="wallSet">A WallConstructionSet object for this ConstructionSet..</param>
        /// <param name="floorSet">A FloorConstructionSet object for this ConstructionSet..</param>
        /// <param name="roofCeilingSet">A RoofCeilingConstructionSet object for this ConstructionSet..</param>
        /// <param name="apertureSet">A ApertureConstructionSet object for this ConstructionSet..</param>
        /// <param name="doorSet">A DoorConstructionSet object for this ConstructionSet..</param>
        /// <param name="shadeConstruction">A ShadeConstruction to set the reflectance properties of all outdoor shades of all objects to which this ConstructionSet is assigned..</param>
        /// <param name="airBoundaryConstruction">An AirBoundaryConstruction or OpaqueConstruction to set the properties of Faces with an AirBoundary type..</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 ConstructionSet
        (
            string identifier,                                                                                                                                                                                                                                                                                                                                                                                                       // Required parameters
            string displayName = default, Object userData = default, WallConstructionSet wallSet = default, FloorConstructionSet floorSet = default, RoofCeilingConstructionSet roofCeilingSet = default, ApertureConstructionSet apertureSet = default, DoorConstructionSet doorSet = default, ShadeConstruction shadeConstruction = default, AnyOf <AirBoundaryConstruction, OpaqueConstruction> airBoundaryConstruction = default // Optional parameters
        ) : base(identifier: identifier, displayName: displayName, userData: userData)                                                                                                                                                                                                                                                                                                                                               // BaseClass
        {
            this.WallSet                 = wallSet;
            this.FloorSet                = floorSet;
            this.RoofCeilingSet          = roofCeilingSet;
            this.ApertureSet             = apertureSet;
            this.DoorSet                 = doorSet;
            this.ShadeConstruction       = shadeConstruction;
            this.AirBoundaryConstruction = airBoundaryConstruction;

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

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