public static void PassByValue(ref ValueTypeCounter c1, RefTypeCounter c2) { c1.Inc(); c2.Inc(); CallInc(c1); CallInc(c2); }
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); }
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(); }