File: System\Windows\Forms\ComponentModel\COM2Interop\Com2TypeInfoProcessor.CachedProperties.cs
Web Access
Project: ..\..\..\src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace System.Windows.Forms.ComponentModel.Com2Interop;
 
internal static partial class Com2TypeInfoProcessor
{
    internal class CachedProperties
    {
        private readonly Com2PropertyDescriptor[] _properties;
 
        public readonly uint MajorVersion;
        public readonly uint MinorVersion;
 
        internal CachedProperties(Com2PropertyDescriptor[] properties, int defaultIndex, uint majorVersion, uint minorVersion)
        {
            _properties = ClonePropertyDescriptors(properties);
            MajorVersion = majorVersion;
            MinorVersion = minorVersion;
            DefaultIndex = defaultIndex;
        }
 
        public Com2PropertyDescriptor[] Properties => ClonePropertyDescriptors(_properties);
 
        public int DefaultIndex { get; }
 
        private static Com2PropertyDescriptor[] ClonePropertyDescriptors(Com2PropertyDescriptor[] properties)
        {
            Com2PropertyDescriptor[] clonedProperties = new Com2PropertyDescriptor[properties.Length];
            for (int i = 0; i < properties.Length; i++)
            {
                clonedProperties[i] = properties[i] is ICloneable cloneable
                    ? (Com2PropertyDescriptor)cloneable.Clone()
                    : properties[i];
            }
 
            return clonedProperties;
        }
    }
}