using System;
namespace Callback
{
public class TestCallbacks
{
public Action<int, bool, decimal, decimal, bool> TestCallback;
}
public static class TestClass
{
public static TestCallbacks Callbacks;
public static void Initialize(TestCallbacks callbacks)
{
Callbacks = callbacks;
}
public static void TestCallback()
{
// Passing i = 100!
Callbacks.TestCallback(100, true, 200m, 300m, false);
}
}
class Program
{
private static void TestFunction(int i, bool b1, decimal d1, decimal d2, bool b2)
{
Console.WriteLine($"TestFunction, i = {i}!!!");
}
static void Main(string[] args)
{
Console.WriteLine("Test begin...");
var testCallbacks = new TestCallbacks()
{
TestCallback = TestFunction
};
TestClass.Initialize(testCallbacks);
TestClass.TestCallback();
}
}
}
dXNpbmcgU3lzdGVtOwoKbmFtZXNwYWNlIENhbGxiYWNrCnsKICAgIHB1YmxpYyBjbGFzcyBUZXN0Q2FsbGJhY2tzCiAgICB7CiAgICAgICAgcHVibGljIEFjdGlvbjxpbnQsIGJvb2wsIGRlY2ltYWwsIGRlY2ltYWwsIGJvb2w+IFRlc3RDYWxsYmFjazsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFRlc3RDbGFzcwogICAgewogICAgICAgIHB1YmxpYyBzdGF0aWMgVGVzdENhbGxiYWNrcyBDYWxsYmFja3M7CgogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBJbml0aWFsaXplKFRlc3RDYWxsYmFja3MgY2FsbGJhY2tzKQogICAgICAgIHsKICAgICAgICAgICAgQ2FsbGJhY2tzID0gY2FsbGJhY2tzOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHN0YXRpYyB2b2lkIFRlc3RDYWxsYmFjaygpCiAgICAgICAgewogICAgICAgICAgICAvLyBQYXNzaW5nIGkgPSAxMDAhCiAgICAgICAgICAgIENhbGxiYWNrcy5UZXN0Q2FsbGJhY2soMTAwLCB0cnVlLCAyMDBtLCAzMDBtLCBmYWxzZSk7CiAgICAgICAgfQogICAgfQoKICAgIGNsYXNzIFByb2dyYW0KICAgIHsKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIFRlc3RGdW5jdGlvbihpbnQgaSwgYm9vbCBiMSwgZGVjaW1hbCBkMSwgZGVjaW1hbCBkMiwgYm9vbCBiMikKICAgICAgICB7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiVGVzdEZ1bmN0aW9uLCBpID0ge2l9ISEhIik7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICAgICAgewogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVGVzdCBiZWdpbi4uLiIpOwoKICAgICAgICAgICAgdmFyIHRlc3RDYWxsYmFja3MgPSBuZXcgVGVzdENhbGxiYWNrcygpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRlc3RDYWxsYmFjayA9IFRlc3RGdW5jdGlvbgogICAgICAgICAgICB9OwoKICAgICAgICAgICAgVGVzdENsYXNzLkluaXRpYWxpemUodGVzdENhbGxiYWNrcyk7CgogICAgICAgICAgICBUZXN0Q2xhc3MuVGVzdENhbGxiYWNrKCk7CiAgICAgICAgfQogICAgfQp9