|
| 1 | +using System.Reflection |
| 2 | +BEGIN NameSpace ConsoleApp1 |
| 3 | +FUNCTION Start( ) AS VOID |
| 4 | + /* |
| 5 | + local oType := Typeof(test) as Type |
| 6 | + foreach oMem as MemberInfo in oType:GetMembers() |
| 7 | + if oMem is PropertyInfo VAR oProp |
| 8 | + ? "Prop", oProp:Name, oProp:PropertyType |
| 9 | + foreach var oAcc in oProp:GetAccessors() |
| 10 | + if oAcc:DeclaringType == oType |
| 11 | + ? "Accessor", oAcc:Name, oAcc:ReturnType |
| 12 | + endif |
| 13 | + next |
| 14 | + elseif oMem is MethodInfo var oMethod |
| 15 | + if oMethod:DeclaringType == oType |
| 16 | + ? "Method", oMethod:Name, oMethod:ReturnType |
| 17 | + endif |
| 18 | + endif |
| 19 | + next |
| 20 | + ? "InterfaceMap" |
| 21 | + var map := oType:GetInterfaceMap(typeof( ITest)) |
| 22 | + foreach m as methodInfo in map:InterfaceMethods |
| 23 | + ? m:Name, m:ReturnType |
| 24 | + next |
| 25 | + */ |
| 26 | + local oTest := Test{} as Test |
| 27 | + // indexed SELF property |
| 28 | + oTest[1] := "abc" |
| 29 | + ? oTest[1] |
| 30 | + xAssert(oTest[1] == "abc1") |
| 31 | + LOCAL oTest2 := oTest as ITest |
| 32 | + ? oTest2[1] |
| 33 | + oTest2[42] := "sometext" // sets it to "sometext42" |
| 34 | + ? oTest2[1] |
| 35 | + xAssert((String)oTest2[1] == "ITestsometext421") |
| 36 | + // Indexed expression body |
| 37 | + ? oTest:Foo[42] |
| 38 | + xAssert(oTest:Foo[42] == "42") |
| 39 | + ? oTest:Foo2[4242] |
| 40 | + ? oTest:Foo2[4242] |
| 41 | + xAssert(oTest:Foo2[4242] == "4242") |
| 42 | +RETURN |
| 43 | + |
| 44 | +class Test IMPLEMENTS ITest |
| 45 | + PRIVATE sValue as sTRING |
| 46 | + |
| 47 | + PROPERTY SELF[nItem as LONG] AS String |
| 48 | + GET |
| 49 | + RETURN sValue |
| 50 | + END GET |
| 51 | + SET |
| 52 | + sValue := value + nItem:ToString() |
| 53 | + END SET |
| 54 | + END PROPERTY |
| 55 | + PROPERTY ITest.SELF[nItem as LONG] AS object |
| 56 | + GET |
| 57 | + RETURN "ITest"+ (string) sValue +nItem:ToString() |
| 58 | + END GET |
| 59 | + SET |
| 60 | + sValue := ((string) value) +nItem:ToString() |
| 61 | + END SET |
| 62 | + END PROPERTY |
| 63 | + PROPERTY Custom[cItem as STRING] AS String |
| 64 | + GET |
| 65 | + RETURN sValue |
| 66 | + END GET |
| 67 | + SET |
| 68 | + sValue := value |
| 69 | + END SET |
| 70 | + END PROPERTY |
| 71 | + PROPERTY ITest.Custom[nItem as LONG] AS OBJECT |
| 72 | + GET |
| 73 | + RETURN sValue |
| 74 | + END GET |
| 75 | + SET |
| 76 | + sValue := (string) value |
| 77 | + END SET |
| 78 | + END PROPERTY |
| 79 | + METHOD TestMe() as STRING |
| 80 | + RETURN "" |
| 81 | + METHOD ITest.TestMe() as Object |
| 82 | + RETURN "" |
| 83 | + PROPERTY Foo[nItem as LONG] AS STRING => nItem:ToString() |
| 84 | + PROPERTY Foo2(nItem as LONG) AS STRING GET nItem:ToString() |
| 85 | + |
| 86 | +END class |
| 87 | + |
| 88 | + |
| 89 | +INTERFACE ITest |
| 90 | + PROPERTY Custom[nItem as LONG] AS OBJECT GET SET |
| 91 | + PROPERTY SELF[nItem as LONG] AS OBJECT GET SET |
| 92 | + METHOD TestMe as OBJECT |
| 93 | +END INTERFACE |
| 94 | +END NAMESPACE |
| 95 | + |
| 96 | +PROC xAssert(l AS LOGIC) AS VOID |
| 97 | + IF l |
| 98 | + ? "Assertion passed" |
| 99 | + ELSE |
| 100 | + THROW Exception{"Incorrect result"} |
| 101 | + END IF |
| 102 | +RETURN |
0 commit comments