public MockPacket(int packetType, MockPacketBody mockPacketBody) { PacketType = packetType; Bodies = new List <MockPacketBody> { mockPacketBody }; }
/// <summary> /// List 객체 참조 테스트 /// </summary> /// <remarks> /// - 객체를 참조하는 경우, 원본 객체가 변경되면 참조하는 쪽에도 변경사항이 반영 됨 /// - 원본 객체가 새로 할당되는 경우, 참조 객체는 원본 객체의 기존 값을 유지하므로 연결 관계는 끊어짐 /// </remarks> /// <param name="enabled"></param> private static void TestListReference(bool enabled = true) { if (!enabled) { return; } // 원본 데이터 byte[] data = Encoding.UTF8.GetBytes("12345"); // 원본 데이터를 포함하는 패킷바디 MockPacketBody orgPacketBody = new MockPacketBody { CompressionType = 0, Data = data }; MockPacket orgPacket = new MockPacket { PacketType = 1, Bodies = new List <MockPacketBody> { orgPacketBody } }; // 패킷 데이터를 그대로 참조하는 패킷바디 복사본 MockPacket newPacket = new MockPacket { PacketType = 2, Bodies = orgPacket.Bodies }; // 원본 패킷의 패킷바디 변경 orgPacket.Bodies[0].Data = Encoding.UTF8.GetBytes("ABCDE"); // 원본 패킷의 패킷바디 출력 Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}"); // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); // 원본 패킷을 삭제 orgPacket = null; // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); // 원본 패킷을 새로 할당 orgPacket = new MockPacket { PacketType = 2, Bodies = new List <MockPacketBody> { new MockPacketBody { CompressionType = 0, Data = Encoding.UTF8.GetBytes("98765") } } }; // 원본 패킷의 패킷바디 출력 Console.WriteLine($"Original Packet, data:{Encoding.UTF8.GetString(orgPacket.Bodies[0].Data)}"); // 클론 패킷의 패킷바디 출력 Console.WriteLine($"Clone Packet, data:{Encoding.UTF8.GetString(newPacket.Bodies[0].Data)}"); }