// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Collections.Generic; using System.Security; namespace System.Runtime.Serialization { internal sealed class GenericParameterDataContract : DataContract { [SecurityCritical] private GenericParameterDataContractCriticalHelper _helper; [SecuritySafeCritical] internal GenericParameterDataContract(Type type) : base(new GenericParameterDataContractCriticalHelper(type)) { _helper = base.Helper as GenericParameterDataContractCriticalHelper; } internal int ParameterPosition { [SecuritySafeCritical] get { return _helper.ParameterPosition; } } public override bool IsBuiltInDataContract { get { return true; } } private class GenericParameterDataContractCriticalHelper : DataContract.DataContractCriticalHelper { private int _parameterPosition; internal GenericParameterDataContractCriticalHelper(Type type) : base(type) { SetDataContractName(DataContract.GetStableName(type)); _parameterPosition = type.GenericParameterPosition; } internal int ParameterPosition { get { return _parameterPosition; } } } internal override DataContract BindGenericParameters(DataContract[] paramContracts, Dictionary<DataContract, DataContract> boundContracts) { return paramContracts[ParameterPosition]; } } }