コード例 #1
0
        public void VirtualFuncOfStruct()
        {
            Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
            c1.Inc();
            c1.Inc();
            Assert.AreEqual("ValueTypeCounter { 2 }", c1.ToString());

            Assert.AreEqual(c1.ToString() + ",hashcode:" + c1.GetHashCode(), Redirect.BaseTest.VirtualFuncOfStruct(c1));
        }
コード例 #2
0
        public void UnboxBase()
        {
            Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
            Redirect.ValueTypeCounter c2 = new Redirect.ValueTypeCounter();
            c1.Inc();
            Assert.AreEqual(1, c1.CompareTo(c2));
            c2.Inc();
            Assert.AreEqual(0, c1.CompareTo(c2));
            c2.Inc();
            Assert.AreEqual(-1, c1.CompareTo(c2));

            Assert.That(() => c1.CompareTo(1), Throws.ArgumentException);
        }
コード例 #3
0
 public static void PassByValue(ref ValueTypeCounter c1, RefTypeCounter c2)
 {
     c1.Inc();
     c2.Inc();
     CallInc(c1);
     CallInc(c2);
 }
コード例 #4
0
        public void StructBase()
        {
            Redirect.ValueTypeCounter vtc = new Redirect.ValueTypeCounter();
            int c = vtc.Val;

            vtc.Inc();
            Assert.AreEqual(vtc.Val, c + 1);
        }
コード例 #5
0
        public static int Initobj(int a)
        {
            ValueTypeCounter c1 = new ValueTypeCounter();

            c1.Inc();
            ValueTypeCounter          c2 = new ValueTypeCounter(a);
            ValueTypeCounterContainer cc = new ValueTypeCounterContainer();

            cc.Init(a);
            return(c1.Val + c2.Val + cc.c.Val);
        }
コード例 #6
0
        public void Ldflda()
        {
            Redirect.ValueTypeCounter c = new Redirect.ValueTypeCounter();
            Redirect.BaseTest.Ldflda(ref c);
            Assert.AreEqual(10, c.Val);
            Redirect.BaseTest.Ldflda(ref c);
            c.Inc();
            Assert.AreEqual(21, c.Val);

            c = new Redirect.ValueTypeCounter();
            Redirect.ValueTypeCounterContainer cc = new Redirect.ValueTypeCounterContainer();
            cc.c = c;
            Redirect.BaseTest.Ldflda(ref cc);
            Assert.AreEqual(10, cc.c.i);
            Redirect.BaseTest.Ldflda(ref cc);
            cc.c.Inc();
            Assert.AreEqual(21, cc.c.Val);

            Redirect.W1 w1 = new Redirect.W1()
            {
                F = new Redirect.ValueTypeCounter()
            };

            Redirect.W2 w2 = new Redirect.W2()
            {
                F = w1
            };

            Redirect.W3 w3 = new Redirect.W3()
            {
                F = w2
            };

            Redirect.BaseTest.Ldflda(ref w1);
            Assert.AreEqual(10, w1.F.i);

            Redirect.BaseTest.Ldflda(ref w2);
            Assert.AreEqual(10, w2.F.F.i);

            Redirect.BaseTest.Ldflda(ref w3);
            Assert.AreEqual(10, w3.F.F.F.i);

            Assert.AreEqual(10, Redirect.BaseTest.Ldflda_m(ref w3));
        }
コード例 #7
0
 static void CallInc(ValueTypeCounter counter)
 {
     counter.Inc();
 }