+using System.Collections;
+abstract class A {
+ protected abstract int this [int a] { get; }
+
+ public int EmulateIndexer (int a)
+ {
+ return this [a];
+ }
+}
+
+class B : A {
+ protected override int this [int a] { get { return a;} }
+
+ public int M ()
+ {
+ return this [0];
+ }
+
+}
class X {
int v1, v2;
static int Main ()
{
X x = new X ();
- int b;
- x [1] = x [0] = 1;
+ x [0] = 1;
if (x.v1 != 1)
return 1;
if (x [0] != 1)
return 2;
- return 0;
-
+ B bb = new B ();
+
+ if (bb.EmulateIndexer (10) != 10)
+ return 3;
+
+ //
+ // This tests that we properly set the return type for the setter
+ // use pattern in the following indexer (see bug 36156)
+ Hashtable a = new Hashtable ();
+ int b = (int) (a [0] = 1);
+ if (b != 1)
+ return 4;
+ return new B ().M ();
}
}