| File: System\Reflection\TypeLoading\Constructors\RoConstructor.cs | Web Access |
| Project: src\runtime\src\libraries\System.Reflection.MetadataLoadContext\src\System.Reflection.MetadataLoadContext.csproj (System.Reflection.MetadataLoadContext) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Globalization; namespace System.Reflection.TypeLoading { /// <summary> /// Base class for all ConstructorInfo objects created by a MetadataLoadContext. /// </summary> internal abstract partial class RoConstructor : LeveledConstructorInfo, IRoMethodBase { protected RoConstructor() { } public abstract override bool Equals(object? obj); public abstract override int GetHashCode(); public sealed override Type DeclaringType => GetRoDeclaringType(); internal abstract RoType GetRoDeclaringType(); public sealed override Type ReflectedType => DeclaringType; public sealed override string Name => field ??= ComputeName(); protected abstract string ComputeName(); public sealed override Module Module => GetRoModule(); internal abstract RoModule GetRoModule(); public abstract override int MetadataToken { get; } public sealed override bool HasSameMetadataDefinitionAs(MemberInfo other) => this.HasSameMetadataDefinitionAsCore(other); public abstract override IEnumerable<CustomAttributeData> CustomAttributes { get; } public sealed override IList<CustomAttributeData> GetCustomAttributesData() => CustomAttributes.ToReadOnlyCollection(); public sealed override object[] GetCustomAttributes(bool inherit) => throw new InvalidOperationException(SR.Arg_InvalidOperation_Reflection); public sealed override object[] GetCustomAttributes(Type attributeType, bool inherit) => throw new InvalidOperationException(SR.Arg_InvalidOperation_Reflection); public sealed override bool IsDefined(Type attributeType, bool inherit) => throw new InvalidOperationException(SR.Arg_InvalidOperation_Reflection); public sealed override bool IsConstructedGenericMethod => false; public sealed override bool IsGenericMethodDefinition => false; public sealed override bool IsGenericMethod => false; public sealed override MethodAttributes Attributes => (_lazyMethodAttributes == MethodAttributesSentinel) ? (_lazyMethodAttributes = ComputeAttributes()) : _lazyMethodAttributes; protected abstract MethodAttributes ComputeAttributes(); private const MethodAttributes MethodAttributesSentinel = (MethodAttributes)(-1); private volatile MethodAttributes _lazyMethodAttributes = MethodAttributesSentinel; public sealed override CallingConventions CallingConvention => (_lazyCallingConventions == CallingConventionsSentinel) ? (_lazyCallingConventions = ComputeCallingConvention()) : _lazyCallingConventions; protected abstract CallingConventions ComputeCallingConvention(); private const CallingConventions CallingConventionsSentinel = (CallingConventions)(-1); private volatile CallingConventions _lazyCallingConventions = CallingConventionsSentinel; public sealed override MethodImplAttributes MethodImplementationFlags => (_lazyMethodImplAttributes == MethodImplAttributesSentinel) ? (_lazyMethodImplAttributes = ComputeMethodImplementationFlags()) : _lazyMethodImplAttributes; protected abstract MethodImplAttributes ComputeMethodImplementationFlags(); private const MethodImplAttributes MethodImplAttributesSentinel = (MethodImplAttributes)(-1); private volatile MethodImplAttributes _lazyMethodImplAttributes = MethodImplAttributesSentinel; public sealed override MethodImplAttributes GetMethodImplementationFlags() => MethodImplementationFlags; public abstract override MethodBody? GetMethodBody(); public sealed override bool ContainsGenericParameters => GetRoDeclaringType().ContainsGenericParameters; public sealed override ParameterInfo[] GetParameters() => GetParametersNoCopy().CloneArray<ParameterInfo>(); internal RoParameter[] GetParametersNoCopy() => MethodSig.Parameters; private MethodSig<RoParameter> MethodSig => field ??= ComputeMethodSig(); protected abstract MethodSig<RoParameter> ComputeMethodSig(); public sealed override string ToString() => Loader.GetDisposedString() ?? this.ToString(ComputeMethodSigStrings()); protected abstract MethodSig<string> ComputeMethodSigStrings(); // No trust environment to apply these to. public sealed override bool IsSecurityCritical => throw new InvalidOperationException(SR.InvalidOperation_IsSecurity); public sealed override bool IsSecuritySafeCritical => throw new InvalidOperationException(SR.InvalidOperation_IsSecurity); public sealed override bool IsSecurityTransparent => throw new InvalidOperationException(SR.InvalidOperation_IsSecurity); // Not valid in a ReflectionOnly context public sealed override object Invoke(object? obj, BindingFlags invokeAttr, Binder? binder, object?[]? parameters, CultureInfo? culture) => throw new InvalidOperationException(SR.Arg_ReflectionOnlyInvoke); public sealed override object Invoke(BindingFlags invokeAttr, Binder? binder, object?[]? parameters, CultureInfo? culture) => throw new InvalidOperationException(SR.Arg_ReflectionOnlyInvoke); public sealed override RuntimeMethodHandle MethodHandle => throw new InvalidOperationException(SR.Arg_InvalidOperation_Reflection); MethodBase IRoMethodBase.MethodBase => this; public MetadataLoadContext Loader => GetRoModule().Loader; public abstract TypeContext TypeContext { get; } string IRoMethodBase.GetMethodSigString(int position) => ComputeMethodSigStrings()[position]; } }