-
Notifications
You must be signed in to change notification settings - Fork 727
/
ITypeInfo.cs
141 lines (113 loc) · 4.43 KB
/
ITypeInfo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
// Copyright (c) Charlie Poole, Rob Prouse and Contributors. MIT License - see LICENSE.txt
using System;
using System.Reflection;
namespace NUnit.Framework.Interfaces
{
/// <summary>
/// The ITypeInfo interface is an abstraction of a .NET Type
/// </summary>
public interface ITypeInfo : IReflectionInfo
{
#region Properties
/// <summary>
/// Gets the underlying Type on which this ITypeInfo is based
/// </summary>
Type Type { get; }
/// <summary>
/// Gets the base type of this type as an ITypeInfo
/// </summary>
ITypeInfo? BaseType { get; }
/// <summary>
/// Returns true if the Type wrapped is equal to the argument
/// </summary>
bool IsType(Type type);
/// <summary>
/// Gets the name of the Type
/// </summary>
string Name { get; }
/// <summary>
/// Gets the full name of the Type
/// </summary>
string FullName { get; }
/// <summary>
/// Gets the assembly in which the type is declared
/// </summary>
Assembly Assembly { get; }
/// <summary>
/// Gets the namespace of the Type
/// </summary>
string? Namespace { get; }
/// <summary>
/// Gets a value indicating whether the type is abstract.
/// </summary>
bool IsAbstract { get; }
/// <summary>
/// Gets a value indicating whether the Type is a generic Type
/// </summary>
bool IsGenericType { get; }
/// <summary>
/// Gets a value indicating whether the Type has generic parameters that have not been replaced by specific Types.
/// </summary>
bool ContainsGenericParameters { get; }
/// <summary>
/// Gets a value indicating whether the Type is a generic Type definition
/// </summary>
bool IsGenericTypeDefinition { get; }
/// <summary>
/// Gets a value indicating whether the type is sealed.
/// </summary>
bool IsSealed { get; }
/// <summary>
/// Gets a value indicating whether this type is a static class.
/// </summary>
bool IsStaticClass { get; }
#endregion
#region Methods
/// <summary>
/// Get the display name for this typeInfo.
/// </summary>
string GetDisplayName();
/// <summary>
/// Get the display name for an object of this type, constructed with specific arguments
/// </summary>
string GetDisplayName(object?[]? args);
/// <summary>
/// Returns a Type representing a generic type definition from which this Type can be constructed.
/// </summary>
Type GetGenericTypeDefinition();
/// <summary>
/// Returns a new ITypeInfo representing an instance of this generic Type using the supplied Type arguments
/// </summary>
ITypeInfo MakeGenericType(Type[] typeArgs);
/// <summary>
/// Returns a value indicating whether this type has a method with a specified public attribute
/// </summary>
bool HasMethodWithAttribute(Type attrType);
/// <summary>
/// Returns an array of IMethodInfos for methods of this Type
/// that match the specified flags.
/// </summary>
IMethodInfo[] GetMethods(BindingFlags flags);
/// <summary>
/// Gets the public constructor taking the specified argument Types
/// </summary>
ConstructorInfo? GetConstructor(Type[] argTypes);
/// <summary>
/// Returns a value indicating whether this Type has a public constructor taking the specified argument Types.
/// </summary>
bool HasConstructor(Type[] argTypes);
/// <summary>
/// Construct an object of this Type, using the specified arguments.
/// </summary>
object Construct(object?[]? args);
#endregion
/// <summary>
/// Returns all methods declared by this type that have the specified attribute, optionally
/// including base classes. Methods from a base class are always returned before methods from a class that
/// inherits from it.
/// </summary>
/// <param name="inherit">Specifies whether to search the fixture type inheritance chain.</param>
IMethodInfo[] GetMethodsWithAttribute<T>(bool inherit)
where T : class;
}
}