Virtual AttributeType property and signature generic types (#19818)
* Virtual AttributeType property and signature generic types https://github.com/dotnet/corefx/issues/31614 1. This will allow Reflection providers the option to supply the attribute type without building an entire constructor. https://github.com/dotnet/corefx/issues/31798 2. This will permit other Reflection providers to support Type.MakeGenericMethodParameter() in their implementations. * More robust argument validation. * Change parameter name Signed-off-by: dotnet-bot <dotnet-bot@microsoft.com>
This commit is contained in:
Родитель
60a9b7c8c4
Коммит
bdd0b15d92
|
@ -10,11 +10,25 @@ namespace System.Reflection
|
|||
{
|
||||
internal sealed class SignatureConstructedGenericType : SignatureType
|
||||
{
|
||||
internal SignatureConstructedGenericType(Type genericTypeDefinition, Type[] genericTypeArguments)
|
||||
// The exception-visible name "typeArguments" is chosen to match the parameter name to Type.MakeGenericType() since that's the
|
||||
// intended user of this constructor.
|
||||
internal SignatureConstructedGenericType(Type genericTypeDefinition, Type[] typeArguments)
|
||||
{
|
||||
Debug.Assert(genericTypeDefinition != null && genericTypeArguments != null);
|
||||
if (genericTypeDefinition == null)
|
||||
throw new ArgumentNullException(nameof(genericTypeDefinition));
|
||||
|
||||
if (typeArguments == null)
|
||||
throw new ArgumentNullException(nameof(typeArguments));
|
||||
|
||||
typeArguments = (Type[])(typeArguments.Clone());
|
||||
for (int i = 0; i < typeArguments.Length; i++)
|
||||
{
|
||||
if (typeArguments[i] == null)
|
||||
throw new ArgumentNullException(nameof(typeArguments));
|
||||
}
|
||||
|
||||
_genericTypeDefinition = genericTypeDefinition;
|
||||
_genericTypeArguments = (Type[])(genericTypeArguments.Clone());
|
||||
_genericTypeArguments = typeArguments;
|
||||
}
|
||||
|
||||
public sealed override bool IsTypeDefinition => false;
|
||||
|
|
|
@ -346,6 +346,8 @@ namespace System
|
|||
public virtual Type MakeGenericType(params Type[] typeArguments) { throw new NotSupportedException(SR.NotSupported_SubclassOverride); }
|
||||
public virtual Type MakePointerType() { throw new NotSupportedException(); }
|
||||
|
||||
public static Type MakeGenericSignatureType(Type genericTypeDefinition, params Type[] typeArguments) => new SignatureConstructedGenericType(genericTypeDefinition, typeArguments);
|
||||
|
||||
public static Type MakeGenericMethodParameter(int position)
|
||||
{
|
||||
if (position < 0)
|
||||
|
|
Загрузка…
Ссылка в новой задаче