public static void PassByValue(ref ValueTypeCounter c1, RefTypeCounter c2)
 {
     c1.Inc();
     c2.Inc();
     CallInc(c1);
     CallInc(c2);
 }
Пример #2
0
 public void PassByValue()
 {
     Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
     Redirect.RefTypeCounter   c2 = new Redirect.RefTypeCounter();
     Redirect.BaseTest.PassByValue(ref c1, c2);
     //Console.WriteLine("c1.v:" + c1.Val + ",c2.v:" + c2.Val);
     Assert.AreEqual(2, c2.Val);
     Assert.AreEqual(1, c1.Val);
 }
Пример #3
0
        public void ClassBase()
        {
            Redirect.RefTypeCounter rtc = new Redirect.RefTypeCounter();
            int c = rtc.Val;

            rtc.Inc();//TODO: 反射访问字段非常慢
            Assert.AreEqual(rtc.Val, c + 1);
            //var MemberwiseClone = typeof(object).GetMethod("MemberwiseClone",
            //    System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            //object vt = new ValueTypeCounter();
            ////ShallowCloneTest t1 = new ShallowCloneTest() { Bar = 1, Foo = 2 };
            //Stopwatch sw = Stopwatch.StartNew();
            ////Console.Write("m:" + MemberwiseClone);
            //var objClone = new ObjectClone();
            //for (int i = 0; i < 1000000; ++i)
            //{
            //    //var cloned = t1.Clone();
            //    //MemberwiseClone.Invoke(t1, null);
            //    //MemberwiseClone.Invoke(vt, null);
            //    //var cloned = ObjectCloner.Clone(t1);
            //    var cloned = objClone.Clone(vt);
            //}
            //Console.WriteLine("Took {0:0.00}s", sw.Elapsed.TotalSeconds);
        }
 static void CallInc(RefTypeCounter counter)
 {
     counter.Inc();
 }