/// <summary>
        ///   Регистрация smart-свойства.
        /// </summary>
        /// <param name="propertyName">Название smart-свойства.</param>
        /// <param name="propertyType">Возвращиемый тип smart-свойства.</param>
        /// <param name="ownerType">Объект, которому принадлежит smart-свойство.</param>
        /// <param name="metadata">Метаданные smart-свойства.</param>
        /// <param name="checkValueCallback">Метод обратного вызова для проверки присваиваемого значения smart-свойства.</param>
        /// <returns>smart-свойство.</returns>
        public static SmartProperty Register(string propertyName, Type propertyType, Type ownerType,
                                             SmartMetadata metadata, SmartPropertyCheckValueCallback checkValueCallback)
        {
            var result = new SmartProperty
            {
                PropertyName       = propertyName,
                PropertyType       = propertyType,
                OwnerType          = ownerType,
                Metadata           = metadata,
                CheckValueCallback = checkValueCallback
            };

            return(result);
        }
        /// <summary>
        ///   Регистрация smart-свойства.
        /// </summary>
        /// <param name="propertyName">Название smart-свойства.</param>
        /// <param name="propertyType">Возвращиемый тип smart-свойства.</param>
        /// <param name="ownerType">Объект, которому принадлежит smart-свойство.</param>
        /// <param name="metadata">Метаданные smart-свойства.</param>
        /// <returns>smart-свойство.</returns>
        public static SmartProperty Register(string propertyName, Type propertyType, Type ownerType, SmartMetadata metadata)
        {
            var result = new SmartProperty
            {
                PropertyName = propertyName,
                PropertyType = propertyType,
                OwnerType    = ownerType,
                Metadata     = metadata
            };

            return(result);
        }