Hey,
On Tue, Jul 6, 2010 at 7:22 PM, Gábor Kozár <[email protected]> wrote:
> I was wondering exactly what they are and when are they created? What is
> their use?
A type or a method spec is simply a specialization of a type. Imagine
that, in Bar.dll, you have:
class Foo {
}
When you open Bar.dll in Cecil, you'll have one TypeDefinition, Foo.
Other assemblies references Bar and using Foo will have to get a
TypeReference to Foo.
Now imagine you want have the method:
public void Lookup (Foo[] foos, int index, ref Foo foo)
{
foo = foos [index];
}
The first parameter of Lookup is an array of Foo. Cecil wise, it's an
ArrayType, with an ElementType being Foo.
The last parameter, is a ref parameter. Cecil wise, it's a
ByReferenceType, with an ElementType being Foo.
Both ArrayType and ByReferenceType extend TypeSpecification.
A TypeSpecification is a specific form of a type. Generic instances
are represented using a GenericInstanceType which is a type spec.
List<Foo>
is a GenericInstanceType, with an ElementType being List, with a
GenericArgument being Foo.
The same goes for methods.
public static T Baz<T> ()
if a MethodDefinition.
Baz<int>() is a GenericInstanceMethod with an ElementMethod being
Baz<T> and a GenericArgument being int.
--
Jb Evain <[email protected]>
--
--
mono-cecil