2010-12-29 7 views
2

안녕하세요! 저는 폼에 의해 전적으로 통제되는 보일러 시스템을 만들었습니다. 그러나 양식 구성 요소는 보일러, 라디에이터 등의 클래스에서 함수를 호출합니다.폼에 객체 참조 전달

모든 클래스를 인스턴스화하는 약간의 기본 클래스가 있지만 양식의 구성 요소에 액세스 할 수 있도록 해당 클래스에 양식 오브젝트를 전달하는 방법을 파악하는 데 어려움을 겪고 있습니다.

나는 각 클래스에서 폼 객체를 저장하기 위해 뮤 테이터 (mutator) 메소드를 사용해야한다고 생각하십니까? 문법적으로 어떻게하면 좋을까요?

감사합니다. ; o)

+0

구문 상 올바르지 않으면 컴파일되지 않습니다. 문학적으로 다른 형용사를 사용한다는 의미였습니까? –

답변

1

class에 양식을 전달하기 만하면됩니다. 클래스가 나중에 그것을 사용할 수 있도록 개인 변수에 저장하십시오. 기본적으로 참조로 전달됩니다.

class Boiler { 
    private Form parentForm; 
    public Boiler(Form f) { 
     parentForm = f; 
    } 
} 
+0

특정 양식 유형을 추가하려고 할 수 있습니다. private OvenForm parentForm; Lazlo

+2

그냥 까다 롭다 - 참조의 * 사본 *이 값으로 전달됩니다. 미묘한 (그러나 중요한) 차이가 있습니다. –

+0

고마워요. 이제 작동 해! ; o) –

1

참조 형식을 메서드에 전달하면 C# (기본적으로) 메서드에 대한 참조 복사본이 전달됩니다. 즉, 클래스에 대한 참조를 전달하면 메서드에 해당 참조의 사본이 제공되고 두 복사본 모두 동일한 객체를 참조하므로 호출 사이트와 메서드 모두 동일한 인스턴스에 대한 액세스 권한을 갖습니다. 예를 들어

:

class Example 
{ 
    static void Main() 
    { 
     string s = "hello, world"; 
     // Here we are passing a copy of the reference 
     // stored in "s" to "Print" 
     Print(s); 
    } 
    static void Print(string str) 
    { 
     // By default, "str" will be assigned the copy of the 
     // reference passed to this method. 
     Console.WriteLine(s); 
    } 
} 

내가 (귀하의 경우, Boiler, Radiator 등의) 도메인 객체를 소비하는 UI 계층에 대해 알고있는 응용 프로그램을 구축 조심해야한다. 이러한 도메인 모델 중 하나에 Form을 전달해야하는 것으로 확인되면 아마 잘못된 것으로 생각할 것입니다. 우리가 달성하고자하는 것을 보여주는 작은 예를 보여 주면, 우리는 당신이 좀더 유지 보수가 가능한 해결책을 찾도록 도울 수있을 것입니다.

+0

흠 음 꽤 많은 코드가 있지만 개념적으로 폼에는 단추, 타이머 등이로드되어 있으며 단추는 클래스의 메서드를 호출합니다. "폼의 일부인 라디에이터의 단추를 클릭하십시오. 블리드(); 라디에이터 "또는"보일러의 버튼 x를 클릭하여 끄기(), 시스템이 "해당되는 경우? 유지 관리가 가능한 OO 솔루션이 아닌 경우 어떻게합니까? –

+0

설명하신 내용이 나에게 잘 들립니다. 그러나 분명하지 않은 점은이 객체 중 하나에 양식 자체를 전달해야하는 이유입니다. –

+0

흠 음, Boiler.bleed()의 경우입니다. 타이머 및 진행률 표시 줄을 재설정하고 텍스트를 변경하는 방법. 그게 올바른 방법인가요? –