On Thu, 2004-01-29 at 14:36, Andrew P. Wilson wrote:
<snip/>
> However, I am finding that the indexer is not called at all and from
> disassembling the executable, the following instructions are occurring
> where I would have thought the indexer would have been called:

> IL_0099:  callvirt instance object class
> [mscorlib]'System.Collections.ArrayList'::'get_Item'(int32)
> IL_009e:  unbox [mscorlib]System.Int32

> Normally, this wouldnât be a problem for me.  However, I cannot find
> this âget_Itemâ function anywhere in the mcs or mono source code. 
> There is also a corresponding âset_Itemâ function that is called as
> well, but again, I cannot find it in the source code.

What you've stumbled across is C# "name mangling".  In order to be
cross-language friendly (as not all languages support operator
overloading), all methods in IL are normal functions, but have a special
naming convention so that languages that support operator overloading
can view them.

For example, the addition operator:

        public static Foo operator+ (Foo lhs, Foo rhs);

would become:

        public static Foo op_Addition (Foo lhs, Foo rhs);

after it's generated.

The array index operator becomes get_Item for the getter, and set_Item
for the setter.  The "Item" part of the names can be changed by using
the System.Runtime.CompilerServices.IndexerNameAttribute (which is how
System.String has a Chars indexer in VB.NET).

This is also true of properties:

        public String MyProperty {
                get {return "Foo";}
                set {/* ignore */}
        }

becomes:

        public String get_MyProperty () {...}
        public void set_MyProperty (String value) {...}

> Is there a situation where the ArrayList Indexer will be called?  And
> do the get_Item and set_Item functions exist somewhere in the source
> code?

As seen above, the indexer is being called, you just need to know about
the name mangling.

 - Jon


_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to