2012-09-12 3 views
4

질문을하기 전에 질문을했는데 좋은 방법으로 설명하지 않았다는 것을 알았으므로 여기에 제안 된 코드 클래스 패킷 처리기 코드가 있습니다. X에서, Y 및 actualy 제조 나 오브젝트 정의 한때 actualx에서 그들 패킷의 값을 얻을 내가 보내 변수)클래스간에 값을 보내는 올바른 방법

public class PacketHandler : GUI 
    { 
     GameUser role; 
     public PacketHandler(GameUser who) 
     { 
      role = who; 
     } 
     ushort Actualx, Actualy; 
     public PacketHandler(ref ushort x ,ref ushort y) 
     { 
      x = Actualx; y = Actualy; 
     } 
     public unsafe void HandleServer(byte[] data) 
     { 
. 
. 
. 
         case 10010: 
          { 
           if (BitConverter.ToUInt16(data, 8) == 1002) 
           { 
            Actualx = BitConverter.ToUInt16(data, 24); 
            Actualy = BitConverter.ToUInt16(data, 26); 
           } 
           break; 
          } 

이 값을 변경 저장되도록 2 USHORT 심판을 받아 구조체가있다 정의 할 객체 매개 변수에 오는 모든 초심 심판에 그들을주기 위해

여기 다른 클래스

public class ClientBase 
{ 
    GameUser role2; 
    public ClientBase(GameUser role) 
    { 
     role2 = role; 
     Thread T = new Thread(HuntThread) { Name = "Hunt Thread" }; 
     T.Start(this); 
    } 
. 
. 
. 
    public void HuntThread(object Sender) 
    { 
     ClientBase Client = Sender as ClientBase; 
     while (true) 
     { 
      Monster Target = GetNextkill(); 
      if (Target != null) 
      { 
       Thread.Sleep(1000); 
       ProxyParadise.Network.Packets.PacketHandler getxandy = new ProxyParadise.Network.Packets.PacketHandler(ref X, ref Y); 
       ProxyParadise.Network.Packets.PacketStructure ps = new ProxyParadise.Network.Packets.PacketStructure(); 
. 
. 
. 

와 진짜 문제는 내가 그것을 추적 할 때 내가 actualy 그러나 그들이 값을 가지고 있는지 메신저, actualx에서 0 발견, 그래서 난 메신저 바보 같은 일을 생각, x와 y에서 0을 찾을 수있다

그래서 모든 경우에,이 코드에서 나를 도울 수 없거나, 스레딩을 사용하면서 다른 클래스의 값을 얻는 적절한 방법을 말해 주시길 바랍니다. 모든 분들께 제 모 형을 제발 지우십시오. 지금은 더 나은 방법으로 여기

+0

당신이 실제로 원하는 것은 내가 설정 한 후에 클래스의 값을 업데이트하는 것이고, 여전히 이전 값을 참조하는 것입니다. 이것은 이벤트 및 속성에 대한 작업처럼 들립니다 ... 글쎄, 세마포 및 잠금 장치 ... – Nevyn

답변

4

은 우리가 간다 :

ushort Actualx, Actualy; 
    public PacketHandler(ref ushort x ,ref ushort y) 
    { 
     x = Actualx; y = Actualy; 
    } 

당신은 오히려 매개 변수 에 필드의 값보다는 매개 변수 필드의 값을 (이 초기에 제로입니다)에 할당된다 : 나는 너무 ref을 제거

ushort Actualx, Actualy; 
    public PacketHandler(ushort x , ushort y) 
    { 
     Actualx = x; 
     Actualy = y 
    } 

참고; 처음에는 필드가 0이기 때문에 전달 된 by-ref 변수를 지우는 불쾌한 부작용이있었습니다 (원래 코드에서).

그러나, 당신이 할 수 무엇 저장 필드로 "는 ushort 참조"입니다.

class Foo { 
    public ushort Value {get;set;} 
} 

다음 발신자의 번호가 같은 Foo 객체에 대한 참조를 가질 수 있기 때문에 하나를 업데이트 : 당신이 필요하면 할 수있는 가장 좋은 방법은 클래스에 값을 드롭하고 객체를 참조하는 것입니다 모두 업데이트 중입니다. 솔직히 PacketHandler은 이미 Foo 대신 사용하고 있습니다. 트릭은 여러 코드 조각이 핸들러에 대한 참조를 가지며 객체에서 .ActualX/.ActualY을 얻는 것입니다.

+0

고마워요. get/set으로 해결했습니다. –

+1

@ AndrewRober :이 질문에 대한 답변이 있으면 답변자에게 보상 해주세요. ! – Nick

관련 문제