a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
218 lines
2.8 KiB
C#
218 lines
2.8 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Runtime.CompilerServices;
|
|
|
|
public interface X
|
|
{
|
|
[IndexerName ("Foo")]
|
|
int this [int a] {
|
|
get;
|
|
}
|
|
}
|
|
|
|
public class Y : X
|
|
{
|
|
int X.this [int a] {
|
|
get {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
[IndexerName ("Bar")]
|
|
public int this [int a] {
|
|
get {
|
|
return 2;
|
|
}
|
|
}
|
|
|
|
[IndexerName ("Bar")]
|
|
public long this [double a] {
|
|
get {
|
|
return 3;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class Z : Y
|
|
{
|
|
[IndexerName ("Whatever")]
|
|
new public long this [double a] {
|
|
get {
|
|
return 4;
|
|
}
|
|
}
|
|
|
|
[IndexerName ("Whatever")]
|
|
public float this [long a, int b] {
|
|
get {
|
|
return a / b;
|
|
}
|
|
}
|
|
|
|
public int InstanceTest ()
|
|
{
|
|
double index = 5;
|
|
|
|
Console.WriteLine ("INSTANCE TEST");
|
|
|
|
if (this [index] != 4)
|
|
return 6;
|
|
if (base [index] != 3)
|
|
return 7;
|
|
|
|
return 0;
|
|
}
|
|
|
|
public static int Test ()
|
|
{
|
|
Z z = new Z ();
|
|
X x = (X) z;
|
|
Y y = (Y) z;
|
|
|
|
Console.WriteLine (z [1]);
|
|
Console.WriteLine (y [2]);
|
|
Console.WriteLine (x [3]);
|
|
|
|
if (z [1] != 4)
|
|
return 1;
|
|
if (y [1] != 2)
|
|
return 2;
|
|
if (x [1] != 1)
|
|
return 3;
|
|
|
|
double index = 5;
|
|
|
|
Console.WriteLine (z [index]);
|
|
Console.WriteLine (y [index]);
|
|
|
|
if (z [index] != 4)
|
|
return 4;
|
|
if (y [index] != 3)
|
|
return 5;
|
|
|
|
int retval = z.InstanceTest ();
|
|
if (retval != 0)
|
|
return retval;
|
|
|
|
B b = new B ();
|
|
if (b [4] != 16)
|
|
return 8;
|
|
if (b [3,5] != 15)
|
|
return 9;
|
|
|
|
D d = new D ();
|
|
if (d [4] != 16)
|
|
return 10;
|
|
if (d [3,5] != 15)
|
|
return 11;
|
|
|
|
//
|
|
// Now test for bug 35492
|
|
//
|
|
ChildList xd = new ChildList ();
|
|
|
|
xd.Add (0);
|
|
if (0 != (int)xd [0])
|
|
return 12;
|
|
|
|
xd.Test ();
|
|
if (1 != (int) xd [0])
|
|
return 13;
|
|
|
|
return 0;
|
|
}
|
|
|
|
class MyArray : ArrayList
|
|
{
|
|
public override object this[int index]
|
|
{
|
|
get { return base[index]; }
|
|
set { base[index] = value;}
|
|
}
|
|
}
|
|
|
|
public static int Main ()
|
|
{
|
|
int result = Test ();
|
|
|
|
Console.WriteLine ("RESULT: " + result);
|
|
|
|
E e = new E ();
|
|
e.g = "monkey";
|
|
|
|
//
|
|
// Now test base [...]
|
|
//
|
|
MyArray arr = new MyArray ( );
|
|
arr.Add ( "String value" );
|
|
if (arr[0].ToString () != "String value")
|
|
return 100;
|
|
|
|
return result;
|
|
}
|
|
|
|
}
|
|
|
|
public class A
|
|
{
|
|
[IndexerName("Monkey")]
|
|
public int this [int value] {
|
|
get {
|
|
return value * 4;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class B : A
|
|
{
|
|
public long this [long a, int value] {
|
|
get {
|
|
return a * value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class C
|
|
{
|
|
public int this [int value] {
|
|
get {
|
|
return value * 4;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class D : C
|
|
{
|
|
public long this [long a, int value] {
|
|
get {
|
|
return a * value;
|
|
}
|
|
}
|
|
}
|
|
|
|
public class E {
|
|
public virtual string g {
|
|
get { return "g"; }
|
|
set { }
|
|
}
|
|
}
|
|
|
|
public class F : E {
|
|
public override string g {
|
|
get { return "h"; }
|
|
}
|
|
}
|
|
|
|
public class DisposableNotifyList : ArrayList
|
|
{
|
|
}
|
|
|
|
public class ChildList : DisposableNotifyList
|
|
{
|
|
public void Test()
|
|
{
|
|
base[0] = 1;
|
|
|
|
}
|
|
}
|