public void Rethrow() { var val = new TestRef(); var con = new Dictionary <Type, IPacketConverter> { [typeof(TestRef)] = new TestConverter() }; try { var buf = new PacketRawWriter(con).SetValue(val); Assert.Fail(); } catch (PacketException ex) when(ex.ErrorCode == PacketError.ConvertError && ex.InnerException.Message == TestConverter._BytesErr) { // ignore } try { var res = new PacketRawReader(new byte[4], con).GetValue <TestRef>(); } catch (Exception ex) when(ex.Message == TestConverter._ValueErr) { // ignore } }
/// <summary> /// 测试的运行方法 /// </summary> public static void testRun() { Console.WriteLine("test start"); int totalCount = 100000000; Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < totalCount; i++) { TestRef temp = new TestRef() { Id = i, Name = "test" }; } sw.Stop(); Console.WriteLine($"引用类型实例化测试消耗:{sw.ElapsedMilliseconds}"); sw.Reset(); sw.Start(); for (int i = 0; i < totalCount; i++) { TestVal temp = new TestVal() { Id = i, Name = "test" }; } sw.Stop(); Console.WriteLine($"值类型实例化测试消耗:{sw.ElapsedMilliseconds}"); Console.Read(); }
static void Main(string[] args) { TestRef t = new TestRef(); t.Something = "Foo"; DoSomething(t); Console.WriteLine(t.Something); }
public void TestOrDefaultReferenceType() { var value = new TestRef(1); var instance = Maybe.Just(value); var result = instance.GetValueOrDefault(); Assert.IsNotNull(result); Assert.AreEqual(value, result); }
public void TestCreateReferenceValue() { var value = new TestRef(); var instance = Maybe.Create(value); instance.AssertJust(value); value = null; instance = Maybe.Create(value); instance.AssertNothing(); }
public void TestRightNull() { TestRef value = null; Assert.Throws <ArgumentNullException>(() => { var instance = new Either <string, TestRef>(value); }); Assert.Throws <ArgumentNullException>(() => { var instance = new Either <string, string>(right: null); }); }
public void TestEqualsJustReference() { var value = new TestRef(); var instance1 = Maybe.Just(value); var instance2 = Maybe.Just(value); Assert.AreEqual(instance1, instance2); var value2 = new TestRef(); instance1 = Maybe.Just(value2); Assert.AreNotEqual(instance1, instance2); }
static void Main(string[] args) { TestRef t1 = new TestRef(); t1.FirstName = "vinay"; t1.Something = "Foo"; DoSomething1(t1); Console.WriteLine(t1.FirstName + ":" + t1.Something); //vinay:Not just a changed t, but a completely different TestRef object TestRef t2 = new TestRef(); t2.FirstName = "vinay"; t2.Something = "Foo"; DoSomething2(t2); Console.WriteLine(t2.FirstName + ":" + t2.Something); //vinay:Foo TestRef t3 = new TestRef(); t3.FirstName = "vinay"; t3.Something = "Foo"; DoSomething3(ref t3); Console.WriteLine(t3.FirstName + ":" + t3.Something); //vinay:Not just a changed t, but a completely different TestRef object TestRef t4 = new TestRef(); t4.FirstName = "vinay"; t4.Something = "Foo"; DoSomething4(ref t4); Console.WriteLine(t4.FirstName + ":" + t4.Something); //vijay:Not just a changed t, but a completely different TestRef object //TestRef t5 = new TestRef(); //t5.FirstName = "vinay"; //t5.Something = "Foo"; //DoSomething5(out t5); //Console.WriteLine(t5.FirstName + ":" + t5.Something); //compile error at method DoSomething5: The out parameter 't' must be assigned to before control leaves the current method delete;Use of unassigned out parameter 't' delete TestRef t6 = new TestRef(); t6.FirstName = "vinay"; t6.Something = "Foo"; DoSomething6(out t6); Console.WriteLine(t6.FirstName + ":" + t6.Something); //vijay:Not just a changed t, but a completely different TestRef object Console.ReadKey(); }
public void TestEqualsReference() { var value = new TestRef(); var instance1 = new Either <int, TestRef>(value); var instance2 = new Either <int, TestRef>(value); Assert.AreEqual(instance1, instance2); var value2 = new TestRef(); instance1 = new Either <int, TestRef>(value2); Assert.AreNotEqual(instance1, instance2); var instance3 = new Either <TestRef, TestRef>(left: value); var instance4 = new Either <TestRef, TestRef>(right: value); Assert.AreNotEqual(instance3, instance4); }
public static void Main() { //构造引用类型实例,其内存空间 在托管堆上 分配 //tr的值是对TestRef类的实例的引用 TestRef tr = new TestRef(1, 2); //构造值类型实例,其内存空间 在线程栈上 分配 //tv的值就是TestVal结构的实例化本身 TestVal tv = new TestVal(1, 2); //输出tr,tv的值 System.Console.WriteLine("tr.a 的值是 " + tr.a); System.Console.WriteLine("tr.b 的值是 " + tr.b); System.Console.WriteLine("tv.a 的值是 " + tv.a); System.Console.WriteLine("tv.b 的值是 " + tv.b); //引用类型的赋值:将tr的值所指向的对象地址复制给tr2 //此时tr和tr2 指向同一个对象,并不需要在托管堆上重新分配空间 TestRef tr2 = tr; //值类型的赋值:在线程上重新分配空间,并将tv的值复制给tv2 //此后tv和tv2相互独立 TestVal tv2 = tv; //tr2所指对象的字段赋值,会改变tr tr2.a = 3; //tv2字段的修改不影响tv tv2.a = 3; System.Console.WriteLine("---------------------"); System.Console.WriteLine("进行 tr2.a=3 tv2.a=3 后:"); System.Console.WriteLine("tr.a 的值是 " + tr.a); System.Console.WriteLine("tr.b 的值是 " + tr.b); System.Console.WriteLine("tr2.a 的值是 " + tr2.a); System.Console.WriteLine("tr2.b 的值是 " + tr2.b); System.Console.WriteLine("tv.a 的值是 " + tv.a); System.Console.WriteLine("tv.b 的值是 " + tv.b); System.Console.WriteLine("tv2.a 的值是 " + tv2.a); System.Console.WriteLine("tv2.b 的值是 " + tv2.b); Console.ReadLine(); }
public void Test() { // 测试用例 // 测试正常使用 Console.WriteLine("测试正常使用"); m_eventMgr.SyncAdd(1, Callback1); m_eventMgr.Dispather(1, null); m_eventMgr.SyncRemove(1, Callback1); m_eventMgr.Dispather(1, null); Console.WriteLine("测试正常使用end"); // 测试用例 // 同步删除 // 即在callbacklist调用中也能删除自己在list中的callback Console.WriteLine("测试同步删除自己"); m_eventMgr.SyncAdd(2, Callback2); m_eventMgr.Dispather(2, null); m_eventMgr.Dispather(2, null); Console.WriteLine("测试同步删除自己end"); // 测试用例 // 同步删除 // 测试删除当前信号队列后面的callback // 测试用例 // 弱引用 // 即在调用时检查gc情况,不调用已经被gc的对象 Console.WriteLine("测试弱引用"); TestRef tmp = new TestRef(); m_eventMgr.SyncAdd(4, tmp.Callback4); m_eventMgr.Dispather(4, null); tmp = null; GC.Collect(); m_eventMgr.Dispather(4, null); Console.WriteLine("测试弱引用end"); Console.Read(); }
static public void DoSomething(TestRef t) { t = new TestRef(); t.Something = "Bar"; }
public void Done(TestRef id) { }
//static void DoSomething5(out TestRef t) //{ // t.Something = "Not just a changed t, but a completely different TestRef object"; //} static void DoSomething6(out TestRef t) { t = new TestRef(); t.FirstName = "vijay"; t.Something = "Not just a changed t, but a completely different TestRef object"; }
static void DoSomething3(ref TestRef t) { t.Something = "Not just a changed t, but a completely different TestRef object"; }