2012-09-25 3 views
0

이 방법은 값 제한으로 구조체 통과를 쉽게 피할 수있는 방법이라고 생각했지만 (실제 구조에서는 더 많은 멤버가 있음) 사용하는 것으로 나타났습니다. 구조체 내부의 대리자는 구조체 내부 멤버를 수정하지 않습니다. 단 대리자 배열의 유일한 용도 인 경우에도 마찬가지입니다.
이 위임 및 구조를 감안할 때 :
구조체 내의 대리자를 사용하여 구조체 내부 요소를 수정하지 않음

public delegate void ChangeValues(); 

structure Effects 
{ 
    int val1,val2,val3; 

    void SetValues(int index) 
    { 
     ChangeValues[] delegateArray = new ChangeValues(){this.SetValSet1,this.setValSet2,this.SetValSet3}; 
     delegateArray[index](); //now set the values as necessary 
    } 
    void setValSet1() 
    { 
     val1=0;val2=1;val3=2; 
    }   
    void setValSet2() 
    { 
     val1=1;val2=2;val3=3; 
    }   
    void setValSet3() 
    { 
     val1=2;val2=3;val3=4; 
    }   
} 

Effects effects = new Effects(); 
effects.SetValues(1); //when stepping through code one sees the values change inside eh setValues functions, but the modified values are gone after leaving this function 

대표는 구조의 또 다른 인스턴스를 생성 한 후 손실 될 수 사용합니까?

답변

1

먼저 컴파일하지 않는 코드는 게시하지 마십시오 (왜 컴파일되지 않는지 묻지 않는 한). 그것은 단지 우리 시대를 낭비합니다.

둘째 : 예 대표는 구조체에 대한 값 복사, 구체적인 확실하지, 것 같다하지만 해결책이 될 것입니다 다음

public delegate void ChangeValues(ref Effects a); 

public struct Effects 
{ 
    int val1,val2,val3; 

    public void SetValues(int index) 
    { 
     ChangeValues[] delegateArray = new ChangeValues[]{setValSet1,setValSet2,setValSet3}; 
     delegateArray[index](ref this); //now set the values as necessary 
    } 
    public void setValSet1(ref Effects a) 
    { 
     a.val1 = 0; a.val2 = 1; a.val3 = 2; 
    } 
    public void setValSet2(ref Effects a) 
    { 
     a.val1 = 1; a.val2 = 2; a.val3 = 3; 
    } 
    public void setValSet3(ref Effects a) 
    { 
     a.val1 = 2; a.val2 = 3; a.val3 = 4; 
    } 
    public override string ToString() 
    { 
     return val1 + "," + val2 + "," + val3; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Effects effects = new Effects(); 
     Effects effects2 = new Effects(); 
     effects.SetValues(1); //when stepping through code one sees the values change inside eh setValues functions, but the modified values are gone after leaving this function 
     Console.WriteLine(effects); 
    } 
} 

그것은 출력 : 1,2,3

관련 문제