Xamarin Public Jenkins (auto-signing) e46a49ecf1 Imported Upstream version 5.10.0.47
Former-commit-id: d0813289fa2d35e1f8ed77530acb4fb1df441bc0
2018-01-24 17:04:36 +00:00

1580 lines
44 KiB
C#

// DelegateTest.cs - NUnit Test Cases for the System.Delegate class
//
// (C) Ximian, Inc. http://www.ximian.com
//
using System;
using System.Reflection;
#if !MONOTOUCH && !FULL_AOT_RUNTIME
using System.Reflection.Emit;
#endif
using System.Threading;
using NUnit.Framework;
namespace MonoTests.System
{
[TestFixture]
public class DelegateTest
{
public class GenericClass<T> {
public void Method<K> (T t, K k) {}
}
public delegate void SimpleDelegate(int a, double b);
[Test] //See bug #372406
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #10539
#endif
public void CreateDelegate1_Method_Private_Instance ()
{
C c = new C ();
MethodInfo mi = typeof (C).GetMethod ("PrivateInstance", BindingFlags.NonPublic | BindingFlags.Instance);
Delegate dg = Delegate.CreateDelegate (typeof (D), mi);
Assert.AreSame (mi, dg.Method, "#1");
Assert.IsNull (dg.Target, "#2");
D d = (D) dg;
d (c);
}
[Test] //Fixes a regression #377324
public void GetMethodFromGenericClass ()
{
GenericClass<int> gclass = new GenericClass<int>();
SimpleDelegate d = new SimpleDelegate (gclass.Method<double>);
MethodInfo method = d.Method;
MethodInfo target = typeof (GenericClass<int>).GetMethod ("Method").MakeGenericMethod(typeof(double));
Assert.IsNotNull (method, "#1");
Assert.AreEqual (target, method, "#2");
}
[Test] // CreateDelegate (Type, MethodInfo)
public void CreateDelegate1_Method_Static ()
{
C c = new C ();
MethodInfo mi = typeof (C).GetMethod ("S");
Delegate dg = Delegate.CreateDelegate (typeof (D), mi);
Assert.AreSame (mi, dg.Method, "#1");
Assert.IsNull (dg.Target, "#2");
D d = (D) dg;
d (c);
}
[Test] // CreateDelegate (Type, MethodInfo)
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #14163
#endif
public void CreateDelegate1_Method_Instance ()
{
C c = new C ();
MethodInfo mi = typeof (C).GetMethod ("M");
Delegate dg = Delegate.CreateDelegate (typeof (D), mi);
Assert.AreSame (mi, dg.Method, "#1");
Assert.IsNull (dg.Target, "#2");
D d = (D) dg;
d (c);
}
[Test] // CreateDelegate (Type, MethodInfo)
public void CreateDelegate1_Method_Null ()
{
try {
Delegate.CreateDelegate (typeof (D), (MethodInfo) null);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("method", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, MethodInfo)
public void CreateDelegate1_Type_Null ()
{
MethodInfo mi = typeof (C).GetMethod ("S");
try {
Delegate.CreateDelegate ((Type) null, mi);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("type", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2 ()
{
E e;
e = (E) Delegate.CreateDelegate (typeof (E), new B (), "Execute");
Assert.IsNotNull (e, "#A1");
Assert.AreEqual (4, e (new C ()), "#A2");
e = (E) Delegate.CreateDelegate (typeof (E), new C (), "Execute");
Assert.IsNotNull (e, "#B1");
Assert.AreEqual (4, e (new C ()), "#D2");
e = (E) Delegate.CreateDelegate (typeof (E), new C (), "DoExecute");
Assert.IsNotNull (e, "#C1");
Assert.AreEqual (102, e (new C ()), "#C2");
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_ArgumentsMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"StartExecute");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_CaseMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (), "ExecutE");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_DoesNotExist ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoesNotExist");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_Null ()
{
C c = new C ();
try {
Delegate.CreateDelegate (typeof (D), c, (string) null);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("method", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_ReturnTypeMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoExecute");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Method_Static ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (), "Run");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Target_Null ()
{
try {
Delegate.CreateDelegate (typeof (D),null, "N");
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("target", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String)
public void CreateDelegate2_Type_Null ()
{
C c = new C ();
try {
Delegate.CreateDelegate ((Type) null, c, "N");
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("type", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3 ()
{
E e;
// matching static method
e = (E) Delegate.CreateDelegate (typeof (E), typeof (B), "Run");
Assert.IsNotNull (e, "#A1");
Assert.AreEqual (5, e (new C ()), "#A2");
// matching static method
e = (E) Delegate.CreateDelegate (typeof (E), typeof (C), "Run");
Assert.IsNotNull (e, "#B1");
Assert.AreEqual (5, e (new C ()), "#B2");
// matching static method
e = (E) Delegate.CreateDelegate (typeof (E), typeof (C), "DoRun");
Assert.IsNotNull (e, "#C1");
Assert.AreEqual (107, e (new C ()), "#C2");
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_ArgumentsMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), typeof (B),
"StartRun");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_CaseMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), typeof (B), "RuN");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_DoesNotExist ()
{
try {
Delegate.CreateDelegate (typeof (E), typeof (B),
"DoesNotExist");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_Instance ()
{
try {
Delegate.CreateDelegate (typeof (E), typeof (B), "Execute");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_Null ()
{
try {
Delegate.CreateDelegate (typeof (D), typeof (C), (string) null);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("method", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Method_ReturnTypeMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), typeof (B),
"DoRun");
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Target_Null ()
{
try {
Delegate.CreateDelegate (typeof (D), (Type) null, "S");
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("target", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Type, String)
public void CreateDelegate3_Type_Null ()
{
try {
Delegate.CreateDelegate ((Type) null, typeof (C), "S");
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("type", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4 ()
{
E e;
B b = new B ();
// instance method, exact case, ignore case
e = (E) Delegate.CreateDelegate (typeof (E), b, "Execute", true);
Assert.IsNotNull (e, "#A1");
Assert.AreEqual (4, e (new C ()), "#A2");
// instance method, exact case, do not ignore case
e = (E) Delegate.CreateDelegate (typeof (E), b, "Execute", false);
Assert.IsNotNull (e, "#B1");
Assert.AreEqual (4, e (new C ()), "#B2");
// instance method, case mismatch, ignore case
e = (E) Delegate.CreateDelegate (typeof (E), b, "ExecutE", true);
Assert.IsNotNull (e, "#C1");
Assert.AreEqual (4, e (new C ()), "#C2");
C c = new C ();
// instance method, exact case, ignore case
e = (E) Delegate.CreateDelegate (typeof (E), c, "Execute", true);
Assert.IsNotNull (e, "#D1");
Assert.AreEqual (4, e (new C ()), "#D2");
// instance method, exact case, ignore case
e = (E) Delegate.CreateDelegate (typeof (E), c, "DoExecute", true);
Assert.IsNotNull (e, "#E1");
Assert.AreEqual (102, e (new C ()), "#E2");
// instance method, exact case, do not ignore case
e = (E) Delegate.CreateDelegate (typeof (E), c, "Execute", false);
Assert.IsNotNull (e, "#F1");
Assert.AreEqual (4, e (new C ()), "#F2");
// instance method, case mismatch, ignore case
e = (E) Delegate.CreateDelegate (typeof (E), c, "ExecutE", true);
Assert.IsNotNull (e, "#G1");
Assert.AreEqual (4, e (new C ()), "#G2");
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_ArgumentsMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"StartExecute", false);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_CaseMismatch ()
{
// instance method, case mismatch, do not igore case
try {
Delegate.CreateDelegate (typeof (E), new B (),
"ExecutE", false);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_DoesNotExist ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoesNotExist", false);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_Null ()
{
try {
Delegate.CreateDelegate (typeof (D), new C (),
(string) null, true);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("method", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_ReturnTypeMismatch ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoExecute", false);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Method_Static ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (), "Run", true);
Assert.Fail ("#1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNull (ex.ParamName, "#5");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Target_Null ()
{
try {
Delegate.CreateDelegate (typeof (D), null, "N", true);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("target", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate4_Type_Null ()
{
C c = new C ();
try {
Delegate.CreateDelegate ((Type) null, c, "N", true);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("type", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9 ()
{
E e;
// do not ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"Execute", false, false);
Assert.IsNotNull (e, "#A1");
Assert.AreEqual (4, e (new C ()), "#A2");
// do not ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"Execute", false, true);
Assert.IsNotNull (e, "#B1");
Assert.AreEqual (4, e (new C ()), "#B2");
// ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"Execute", true, false);
Assert.IsNotNull (e, "#C1");
Assert.AreEqual (4, e (new C ()), "#C2");
// ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"Execute", true, true);
Assert.IsNotNull (e, "#D1");
Assert.AreEqual (4, e (new C ()), "#D2");
// do not ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"Execute", false, false);
Assert.IsNotNull (e, "#E1");
Assert.AreEqual (4, e (new C ()), "#E2");
// do not ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"Execute", false, true);
Assert.IsNotNull (e, "#F1");
Assert.AreEqual (4, e (new C ()), "#F2");
// ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"Execute", true, false);
Assert.IsNotNull (e, "#G1");
Assert.AreEqual (4, e (new C ()), "#G2");
// ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"Execute", true, true);
Assert.IsNotNull (e, "#H1");
Assert.AreEqual (4, e (new C ()), "#H2");
// do not ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"DoExecute", false, false);
Assert.IsNotNull (e, "#I1");
Assert.AreEqual (102, e (new C ()), "#I2");
// do not ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"DoExecute", false, true);
Assert.IsNotNull (e, "#J1");
Assert.AreEqual (102, e (new C ()), "#J2");
// ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"DoExecute", true, false);
Assert.IsNotNull (e, "#K1");
Assert.AreEqual (102, e (new C ()), "#K2");
// ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new C (),
"DoExecute", true, true);
Assert.IsNotNull (e, "#L1");
Assert.AreEqual (102, e (new C ()), "#L2");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_ArgumentsMismatch ()
{
// throw bind failure
try {
Delegate.CreateDelegate (typeof (E), new B (),
"StartExecute", false, true);
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsNull (ex.ParamName, "#A5");
}
// do not throw on bind failure
E e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"StartExecute", false, false);
Assert.IsNull (e, "#B");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_CaseMismatch ()
{
E e;
// do not ignore case, throw bind failure
try {
Delegate.CreateDelegate (typeof (E), new B (),
"ExecutE", false, true);
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsNull (ex.ParamName, "#A5");
}
// do not ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"ExecutE", false, false);
Assert.IsNull (e, "#B");
// ignore case, throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"ExecutE", true, true);
Assert.IsNotNull (e, "#C1");
Assert.AreEqual (4, e (new C ()), "#C2");
// ignore case, do not throw bind failure
e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"ExecutE", true, false);
Assert.IsNotNull (e, "#D1");
Assert.AreEqual (4, e (new C ()), "#D2");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_DoesNotExist ()
{
// throw bind failure
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoesNotExist", false, true);
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsNull (ex.ParamName, "#A5");
}
// do not throw on bind failure
E e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"DoesNotExist", false, false);
Assert.IsNull (e, "#B");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_Null ()
{
try {
Delegate.CreateDelegate (typeof (E), new B (),
(string) null, false, false);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("method", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_ReturnTypeMismatch ()
{
// throw bind failure
try {
Delegate.CreateDelegate (typeof (E), new B (),
"DoExecute", false, true);
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsNull (ex.ParamName, "#A5");
}
// do not throw on bind failure
E e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"DoExecute", false, false);
Assert.IsNull (e, "#B");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Method_Static ()
{
// throw bind failure
try {
Delegate.CreateDelegate (typeof (E), new B (),
"Run", true, true);
Assert.Fail ("#A1");
} catch (ArgumentException ex) {
// Error binding to target method
Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#A2");
Assert.IsNull (ex.InnerException, "#A3");
Assert.IsNotNull (ex.Message, "#A4");
Assert.IsNull (ex.ParamName, "#A5");
}
// do not throw on bind failure
E e = (E) Delegate.CreateDelegate (typeof (E), new B (),
"Run", true, false);
Assert.IsNull (e, "#B");
}
[Test] // CreateDelegate (Type, Object, String, Boolean, Boolean)
public void CreateDelegate9_Target_Null ()
{
try {
Delegate.CreateDelegate (typeof (E),(object) null,
"Execute", true, false);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("target", ex.ParamName, "#6");
}
}
[Test] // CreateDelegate (Type, Object, String, Boolean)
public void CreateDelegate9_Type_Null ()
{
try {
Delegate.CreateDelegate ((Type) null, new B (),
"Execute", true, false);
Assert.Fail ("#1");
} catch (ArgumentNullException ex) {
Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
Assert.IsNull (ex.InnerException, "#3");
Assert.IsNotNull (ex.Message, "#4");
Assert.IsNotNull (ex.ParamName, "#5");
Assert.AreEqual ("type", ex.ParamName, "#6");
}
}
class ParentClass
{
}
class Subclass : ParentClass
{
}
delegate ParentClass CoContraVariantDelegate (Subclass s);
static Subclass CoContraVariantMethod (ParentClass s)
{
return null;
}
[Test]
public void CoContraVariance ()
{
CoContraVariantDelegate d = (CoContraVariantDelegate)
Delegate.CreateDelegate (typeof (CoContraVariantDelegate),
typeof (DelegateTest).GetMethod ("CoContraVariantMethod",
BindingFlags.NonPublic|BindingFlags.Static));
d (null);
}
static object Box (object o)
{
return o;
}
delegate object Boxer ();
[Test]
[Category ("InterpreterNotWorking")]
public void BoxingCovariance ()
{
var boxer = (Boxer) Delegate.CreateDelegate (
typeof (Boxer),
42,
GetType ().GetMethod ("Box", BindingFlags.NonPublic | BindingFlags.Static));
Assert.IsNotNull (boxer);
Assert.AreEqual (42, boxer ());
}
static object Nada (int o)
{
return (int) o;
}
delegate int WrongDelegate ();
[Test]
[ExpectedException (typeof (ArgumentException))]
public void RemoveDelegateTypeMismatch ()
{
Delegate boxer = new Boxer (() => new object ());
Delegate.Remove (boxer, new WrongDelegate (() => 42));
}
[Test]
[ExpectedException (typeof (ArgumentException))]
public void WrongReturnTypeContravariance ()
{
Delegate.CreateDelegate (
typeof (WrongDelegate),
42,
GetType ().GetMethod ("Nada", BindingFlags.NonPublic | BindingFlags.Static));
}
static int Identity (int i)
{
return i;
}
[Test]
[ExpectedException (typeof (ArgumentException))]
public void WrongReturnTypeContravariance_2 ()
{
Delegate.CreateDelegate (
typeof (Boxer),
42,
GetType ().GetMethod ("Identity", BindingFlags.NonPublic | BindingFlags.Static));
}
delegate object CallTarget ();
class Closure {}
static object Target (Closure c)
{
return c;
}
[Test]
[Category ("InterpreterNotWorking")]
public void NullFirstArgumentOnStaticMethod ()
{
CallTarget call = (CallTarget) Delegate.CreateDelegate (
typeof (CallTarget),
null,
GetType ().GetMethod ("Target", BindingFlags.NonPublic | BindingFlags.Static));
Assert.IsNotNull (call);
Assert.IsNull (call.Target);
Assert.IsNull (call ());
}
[Test]
[Category ("InterpreterNotWorking")]
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #10539
#endif
public void Virtual ()
{
// Delegate with abstract method, no target
FooDelegate del = (FooDelegate)Delegate.CreateDelegate (typeof (FooDelegate), typeof (Iface).GetMethod ("retarg"));
C c = new C ();
Assert.AreEqual ("Hello", del (c, "Hello"));
// Combination with normal delegates
FooDelegate del2 = (FooDelegate)Delegate.CreateDelegate (typeof (FooDelegate), typeof (Iface).GetMethod ("retarg"));
FooDelegate del3 = new FooDelegate (c.retarg2);
FooDelegate del4 = (FooDelegate)Delegate.Combine (del2, del3);
Assert.AreEqual ("Hello2", del4 (c, "Hello"));
// Delegate with virtual method, no target
FooDelegate2 del5 = (FooDelegate2)Delegate.CreateDelegate (typeof (FooDelegate2), typeof (B).GetMethod ("retarg3"));
Assert.AreEqual ("Hello2", del5 (c, "Hello"));
}
int int_field;
delegate int Del1 (DelegateTest dt, int i);
public int method1 (int i) {
return int_field + i;
}
[Test]
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #14163
#endif
public void NullTarget_Instance ()
{
Del1 d = (Del1)Delegate.CreateDelegate (typeof (Del1), null, typeof (DelegateTest).GetMethod ("method1"));
DelegateTest dt = new DelegateTest ();
dt.int_field = 5;
Assert.AreEqual (10, d (dt, 5));
}
delegate int Del2 (int i);
public static int method2 (int i) {
return i + 5;
}
[Test]
public void NullTarget_Static ()
{
Del2 d = (Del2)Delegate.CreateDelegate (typeof (Del2), null, typeof (DelegateTest).GetMethod ("method2"));
Assert.AreEqual (10, d (5));
}
delegate int Del3 (int i);
public int method3 (int i) {
return int_field + 5;
}
[Test]
public void HasTarget_Instance ()
{
DelegateTest dt = new DelegateTest ();
dt.int_field = 5;
Del3 d = (Del3)Delegate.CreateDelegate (typeof (Del3), dt, typeof (DelegateTest).GetMethod ("method3"));
Assert.AreEqual (10, d (5));
}
delegate int Del4 (int i);
public static int method4 (string s, int i) {
return Int32.Parse (s) + 5;
}
[Test]
public void HasTarget_Static ()
{
Del4 d = (Del4)Delegate.CreateDelegate (typeof (Del4), "5", typeof (DelegateTest).GetMethod ("method4"));
Assert.AreEqual (10, d (5));
}
public static long? StaticMethodToBeClosedOverNull (object o, long? bar)
{
Console.WriteLine ("o: {0}", o);
return 5;
}
[Test] // #617161
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #10539
#endif
[Category ("InterpreterNotWorking")]
public void ClosedOverNullReferenceStaticMethod ()
{
var del = (Func<long?,long?>) Delegate.CreateDelegate (
typeof (Func<long?,long?>),
null as object,
this.GetType ().GetMethod ("StaticMethodToBeClosedOverNull"));
Assert.IsNull (del.Target);
Assert.AreEqual ((long?) 5, del (5));
}
public void InstanceMethodToBeClosedOverNull ()
{
}
public void InstanceMethodIntToBeClosedOverNull (int i)
{
}
[Test] // #475962
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")] // #10539
#endif
public void ClosedOverNullReferenceInstanceMethod ()
{
var action = (Action) Delegate.CreateDelegate (
typeof (Action),
null as object,
this.GetType ().GetMethod ("InstanceMethodToBeClosedOverNull"));
Assert.IsNull (action.Target);
action ();
var action_int = (Action<int>) Delegate.CreateDelegate (
typeof (Action<int>),
null as object,
this.GetType ().GetMethod ("InstanceMethodIntToBeClosedOverNull"));
Assert.IsNull (action.Target);
action_int (42);
}
struct FooStruct {
public int i, j, k, l;
public int GetProp (int a, int b, int c, int d) {
return i;
}
}
delegate int ByRefDelegate (ref FooStruct s, int a, int b, int c, int d);
#if MONOTOUCH || FULL_AOT_RUNTIME
[Category ("NotWorking")]
#endif
[Test]
public void CallVirtVType ()
{
var action = (ByRefDelegate)Delegate.CreateDelegate (typeof (ByRefDelegate), null, typeof (FooStruct).GetMethod ("GetProp"));
var s = new FooStruct () { i = 42 };
Assert.AreEqual (42, action (ref s, 1, 2, 3, 4));
}
class Foo {
public void Bar ()
{
}
}
Foo foo;
event Action bar_handler;
[Test]
[Category ("InterpreterNotWorking")]
[ExpectedException (typeof (ArgumentException))] // #635349, #605936
public void NewDelegateClosedOverNullReferenceInstanceMethod ()
{
bar_handler += foo.Bar;
}
public void Banga ()
{
}
[Test]
[ExpectedException (typeof (ArgumentException))]
public void CreateDelegateOpenOnly ()
{
Delegate.CreateDelegate (
typeof (Action),
this.GetType ().GetMethod ("Banga"));
}
[Test] // #664205
public void DynamicInvokeClosedStatic ()
{
var d1 = Delegate.CreateDelegate (typeof(Func<int>), null, typeof(DelegateTest).GetMethod ("DynamicInvokeClosedStaticDelegate_CB"));
Assert.AreEqual (1, d1.DynamicInvoke (), "#1");
var d2 = Delegate.CreateDelegate (typeof(Func<int>), "arg", typeof(DelegateTest).GetMethod ("DynamicInvokeClosedStaticDelegate_CB"));
Assert.AreEqual (2, d2.DynamicInvoke (), "#2");
}
public static int DynamicInvokeClosedStaticDelegate_CB (string instance)
{
switch (instance) {
case null:
return 1;
case "arg":
return 2;
default:
Assert.Fail ();
return -1;
}
}
[Test]
[Category ("InterpreterNotWorking")]
public void DynamicInvokeOpenInstanceDelegate ()
{
var d1 = Delegate.CreateDelegate (typeof (Func<DelegateTest, int>), typeof(DelegateTest).GetMethod ("DynamicInvokeOpenInstanceDelegate_CB"));
Assert.AreEqual (5, d1.DynamicInvoke (new DelegateTest ()), "#1");
var d3 = (Func<DelegateTest, int>) d1;
Assert.AreEqual (5, d3 (null), "#2");
}
public int DynamicInvokeOpenInstanceDelegate_CB ()
{
return 5;
}
[Test]
public void DynamicInvoke_InvalidArguments ()
{
Delegate d = new Func<int, int> (TestMethod);
try {
d.DynamicInvoke (null);
Assert.Fail ("#1");
} catch (TargetParameterCountException) {
}
try {
d.DynamicInvoke (new object [0]);
Assert.Fail ("#2");
} catch (TargetParameterCountException) {
}
}
public static int TestMethod (int i)
{
throw new NotSupportedException ();
}
public static void CreateDelegateOfStaticMethodBoundToNull_Helper (object[] args) {}
[Test]
public void CreateDelegateOfStaticMethodBoundToNull ()
{
Type t = typeof (Action);
MethodInfo m = typeof (DelegateTest).GetMethod ("CreateDelegateOfStaticMethodBoundToNull_Helper");
object firstArg = null;
try {
Delegate.CreateDelegate (t, m) ;
Assert.Fail ("#1");
} catch (ArgumentException) { }
try {
Delegate.CreateDelegate(t, m, true);
Assert.Fail ("#2");
} catch (ArgumentException) { }
try {
Delegate.CreateDelegate(t, m, false);
} catch (ArgumentException) { Assert.Fail ("#3"); }
try {
Delegate.CreateDelegate(t, null, m);
} catch (ArgumentException) { Assert.Fail ("#4"); }
try {
Delegate.CreateDelegate(t, null, m, true);
} catch (ArgumentException) { Assert.Fail ("#5"); }
try {
Delegate.CreateDelegate(t, null, m, false);
} catch (ArgumentException) { Assert.Fail ("#6"); }
}
[Test]
public void GetHashCode_Constant () {
Action del = delegate {
};
int hc1 = del.GetHashCode ();
del ();
int hc2 = del.GetHashCode ();
Assert.AreEqual (hc1, hc2);
}
public interface CreateDelegateIFoo {
int Test2 ();
}
public abstract class CreateDelegateFoo {
public abstract int Test ();
}
public class CreateDelegateMid : CreateDelegateFoo {
public override int Test () {
return 1;
}
}
public class CreateDelegateBar : CreateDelegateMid, CreateDelegateIFoo {
public override int Test () {
return 2;
}
public int Test2 () {
return 3;
}
}
public delegate int IntNoArgs ();
[Test]
public void CreateDelegateWithAbstractMethods ()
{
var f = new CreateDelegateBar ();
var m = typeof (CreateDelegateFoo).GetMethod ("Test");
var m2 = typeof (CreateDelegateMid).GetMethod ("Test");
var m3 = typeof (CreateDelegateIFoo).GetMethod ("Test2");
IntNoArgs a1 = (IntNoArgs)Delegate.CreateDelegate (typeof (IntNoArgs), f, m);
IntNoArgs a2 = (IntNoArgs)Delegate.CreateDelegate (typeof (IntNoArgs), f, m2);
IntNoArgs a3 = (IntNoArgs)Delegate.CreateDelegate (typeof (IntNoArgs), f, m3);
Assert.AreEqual (2, a1 (), "#1");
Assert.AreEqual (2, a2 (), "#2");
Assert.AreEqual (3, a3 (), "#3");
}
delegate string FooDelegate (Iface iface, string s);
delegate string FooDelegate2 (B b, string s);
public interface Iface
{
string retarg (string s);
}
#if !MONOTOUCH && !FULL_AOT_RUNTIME
[Test]
[Category ("InterpreterNotWorking")]
public void CreateDelegateWithLdFtnAndAbstractMethod ()
{
AssemblyName assemblyName = new AssemblyName ();
assemblyName.Name = "customMod";
assemblyName.Version = new Version (1, 2, 3, 4);
AssemblyBuilder assembly
= Thread.GetDomain ().DefineDynamicAssembly (
assemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder module = assembly.DefineDynamicModule ("res", "res.dll");
TypeBuilder tb = module.DefineType ("Test2", TypeAttributes.Public, typeof (object));
{
MethodBuilder mb =
tb.DefineMethod ("test", MethodAttributes.Public | MethodAttributes.Static,
typeof (int), null);
ILGenerator il = mb.GetILGenerator ();
il.Emit (OpCodes.Newobj, typeof (CreateDelegateBar).GetConstructor (new Type [] { }));
il.Emit (OpCodes.Ldftn, typeof (CreateDelegateIFoo).GetMethod ("Test2"));
il.Emit (OpCodes.Newobj, typeof (IntNoArgs).GetConstructor (new Type [] { typeof (object), typeof (IntPtr) }));
il.Emit (OpCodes.Call, typeof (IntNoArgs).GetMethod ("Invoke"));
il.Emit (OpCodes.Ret);
}
Type t = tb.CreateType ();
Object obj = Activator.CreateInstance (t, new object [0] { });
int a = (int) t.GetMethod ("test").Invoke (obj, null);
Assert.AreEqual (3, a, "#1");
}
#endif
public static int MethodWithIntParam (int x) {
return 10;
}
[Test]
[Category("NotWorking")]
public void CantBindValueTypeToFirstArg () {
try {
Delegate.CreateDelegate (typeof (Delegate695978_2), 10, typeof (DelegateTest).GetMethod ("MethodWithIntParam"));
Assert.Fail ("create delegate must fail");
} catch (ArgumentException) {}
}
struct Struct695978 {
public int value;
public int test() { return value + 10; }
public static int test2 (ref Struct695978 foo) { return foo.value + 20; }
}
delegate int Delegate695978_1 (ref Struct695978 _this);
delegate int Delegate695978_2 ();
delegate int Delegate695978_3 (Struct695978 _this);
[Test] //tests for #695978
[Category ("NotWorking")]
public void DelegateWithValueTypeArguments ()
{
Struct695978 es = new Struct695978 ();
es.value = 100;
var ar1 = (Delegate695978_1)Delegate.CreateDelegate(typeof (Delegate695978_1), typeof (Struct695978).GetMethod("test"));
Assert.IsNotNull (ar1);
Assert.AreEqual (110, ar1 (ref es));
var ar2 = (Delegate695978_2)Delegate.CreateDelegate(typeof (Delegate695978_2), null, typeof (Struct695978).GetMethod("test"));
Assert.IsNotNull (ar2);
Assert.AreEqual (110, ar2 ());
ar1 = (Delegate695978_1) Delegate.CreateDelegate(typeof (Delegate695978_1), typeof (Struct695978).GetMethod("test2"));
Assert.IsNotNull (ar1);
Assert.AreEqual (120, ar1 (ref es));
try {
Delegate.CreateDelegate(typeof (Delegate695978_2), null, typeof (Struct695978).GetMethod("test2"));
Assert.Fail ("#1");
} catch (ArgumentException) {}
ar2 = (Delegate695978_2) Delegate.CreateDelegate(typeof (Delegate695978_2), new Struct695978 (), typeof (Struct695978).GetMethod("test"));
Assert.IsNotNull (ar2);
Assert.AreEqual (120, ar2 ());
try {
Delegate.CreateDelegate(typeof (Delegate695978_2), new Struct695978 (), typeof (Struct695978).GetMethod("test2"));
Assert.Fail ("#2");
} catch (ArgumentException) {}
try {
Delegate.CreateDelegate(typeof (Delegate695978_3), typeof (Struct695978).GetMethod("test"));
Assert.Fail ("#3");
} catch (ArgumentException) {}
}
[Test]
public void EnumBaseTypeConversion () {
Func<int, int, bool> dm = Int32D2;
var d =
Delegate.CreateDelegate(typeof (Func<StringComparison, StringComparison, bool>), dm.Method) as
Func<StringComparison, StringComparison, bool>;
Assert.IsTrue (d (0, 0));
}
#if !MONOTOUCH && !FULL_AOT_RUNTIME
public static void DynInvokeWithClosedFirstArg (object a, object b)
{
}
[Test]
public void DynamicInvokeClosedOverNullDelegate () {
var dm = new DynamicMethod ("test", typeof (Delegate), null);
var il = dm.GetILGenerator ();
il.Emit (OpCodes.Ldnull);
il.Emit (OpCodes.Ldftn, GetType ().GetMethod ("DynInvokeWithClosedFirstArg"));
il.Emit (OpCodes.Newobj, typeof (Action<object>).GetConstructors ()[0]);
il.Emit (OpCodes.Ret);
var f = (Func <object>) dm.CreateDelegate (typeof (Func <object>));
Action<object> ac = (Action<object>)f();
ac.DynamicInvoke (new object[] { "oi" });
ac.DynamicInvoke (new object[] { null });
}
[Test]
public void DynamicInvokeFirstArgBoundDelegate () {
var dm = new DynamicMethod ("test", typeof (Delegate), null);
var il = dm.GetILGenerator ();
il.Emit (OpCodes.Ldstr, "test");
il.Emit (OpCodes.Ldftn, GetType ().GetMethod ("DynInvokeWithClosedFirstArg"));
il.Emit (OpCodes.Newobj, typeof (Action<object>).GetConstructors ()[0]);
il.Emit (OpCodes.Ret);
var f = (Func <object>) dm.CreateDelegate (typeof (Func <object>));
Action<object> ac = (Action<object>)f();
ac.DynamicInvoke (new object[] { "oi" });
ac.DynamicInvoke (new object[] { null });
}
#endif
public delegate void DoExecuteDelegate1 (C c);
public delegate void DoExecuteDelegate2 (C c);
[Test]
[ExpectedException (typeof (ArgumentException))]
public void DelegateCombineDifferentTypes () {
var b = new B ();
var del1 = new DoExecuteDelegate1 (b.DoExecute);
var del2 = new DoExecuteDelegate2 (b.DoExecute);
var del = Delegate.Combine (del1, del2);
}
[Test]
[ExpectedException (typeof (ArgumentException))]
public void DelegateRemoveDifferentTypes () {
var b = new B ();
var del1 = new DoExecuteDelegate1 (b.DoExecute);
var del2 = new DoExecuteDelegate2 (b.DoExecute);
var del = Delegate.Remove (del1, del2);
}
[Test]
[ExpectedException (typeof (ArgumentException))]
public void CreateDelegateThrowsAnArgumentExceptionWhenCalledWithAnOpenGeneric()
{
var m = GetType().GetMethod("AnyGenericMethod");
Delegate.CreateDelegate(typeof(Action), this, m);
}
[Test]
public void ReflectedTypeInheritedVirtualMethod ()
{
var a = new DerivedClass ();
Action m = a.MyMethod;
Assert.AreEqual (typeof (BaseClass), m.Method.ReflectedType);
}
class BaseClass
{
public virtual void MyMethod() {
Console.WriteLine ("Base method");
}
}
class DerivedClass : BaseClass
{
}
public void AnyGenericMethod<T>()
{
}
static bool Int32D2 (int x, int y)
{
return (x & y) == y;
}
public class B {
public virtual string retarg3 (string s) {
return s;
}
static int Run (C x)
{
return 5;
}
public static void DoRun (C x)
{
}
public static int StartRun (C x, B b)
{
return 6;
}
int Execute (C c)
{
return 4;
}
public void DoExecute (C c)
{
}
public int StartExecute (C c, B b)
{
return 3;
}
}
public class C : B, Iface
{
public string retarg (string s) {
return s;
}
public string retarg2 (Iface iface, string s) {
return s + "2";
}
public override string retarg3 (string s) {
return s + "2";
}
static void Run (C x)
{
}
public new static int DoRun (C x)
{
return 107;
}
void Execute (C c)
{
}
public new int DoExecute (C c)
{
return 102;
}
public void M ()
{
}
public void N (C c)
{
}
public static void S (C c)
{
}
private void PrivateInstance ()
{
}
}
public delegate void D (C c);
public delegate int E (C c);
}
}