public void TestDefaultReturnValue()
        {
            var      testWeakClass = TestWeakClass;
            Delegate weakReference = new WeakDelegateDefault((Func <int, int, int, int>)testWeakClass.Generic);

            Assert.AreEqual((int)weakReference.DynamicInvoke(3, 4, 5), 12);
        }
        public void TestDefaultNullFunc()
        {
            var      testWeakClass = TestWeakClass;
            Delegate weakReference = new WeakDelegateDefault((Action)testWeakClass.NullFunc);

            weakReference.DynamicInvoke();
            Assert.AreEqual(testWeakClass.IntValue, 1);
        }
        public void TestDefaultThreeParam()
        {
            var      testWeakClass = TestWeakClass;
            Delegate weakReference = new WeakDelegateDefault((Action <int, string, byte>)testWeakClass.ThreeParam);

            weakReference.DynamicInvoke(5, "6", (byte)1);
            Assert.AreEqual(testWeakClass.IntValue, 12);
        }
        public void TestDefaultTwoParam()
        {
            var      testWeakClass = TestWeakClass;
            Delegate weakReference = new WeakDelegateDefault((Action <int, int>)testWeakClass.Sum);

            weakReference.DynamicInvoke(5, 6);
            Assert.AreEqual(testWeakClass.IntValue, 11);
        }
        public void TestDefaultWeakLink()
        {
            WeakDelegateDefault weakDelegate = new WeakDelegateDefault((Action)TestWeakClass.NullFunc);

            SampleEvent += (Action)weakDelegate;
            SampleEvent.DynamicInvoke();
            Assert.IsFalse(weakDelegate.IsNullTarget);
            GC.Collect();
            SampleEvent.DynamicInvoke();
            Assert.IsTrue(weakDelegate.IsNullTarget);
        }