2016-10-16 2 views
-1

질문 자체가 약간 멍청한 소리입니다. 다른 클래스에서 정적이 아닌 메서드를 호출하려면 클래스의 현재 인스턴스를 사용해야합니다. 두 번째 클래스를 호출 할 메서드가있는 클래스의 인스턴스를 가져 오려고했습니다. 나는 성공했다고 생각하지만 여전히 아직 작동하지 않습니다.C#에서 다른 클래스에서 비 정적 메서드를 호출하려면 어떻게해야합니까?

arbeitsbearbeitung arbeitenbearbeitung = new arbeitsbearbeitung(arbeit); 
arbeitenbearbeitung.Parent = this; 
arbeitenbearbeitung.Show(); 

을 (1 급 만점) 그리고 클래스 2를 사용하는 곳은 다음과 같습니다 :

내가 두 번째 클래스에 인스턴스를 가지고 노력하는 방법

이 하나의 방법

Form frm = (Form)this.Parent; 
frm.updateGrid(); 

매개 변수로 전달하는 것과 같이 다른 방법으로 시도해 보았습니다. 같은 결과 ...

이 클래스 1 updateGrid()입니다 :

그것은 양식 updateGrid에 대한 정의를 포함하지 않는 것을 알려줍니다
public void updateGrid() 
{ 
    klassenarbeitenTableAdapter.Fill(this.database1DataSet.Klassenarbeiten); 
} 

.

나는 바보가되어야하지만 내 실수는 찾을 수 없습니다.

생각하고 2 시간 동안 인터넷 검색 및 아직 단서 없음.

나는 지금 바보가된다. 도와 줘서 고마워!

답변

3

Form에는 updateGrid 메서드가 없지만 파생 클래스가 있습니다. 학급에 부모님을 캐스팅해야합니다 : MyForm frm = (MyForm) this.부모의;

3

당신은 클래스 당신은 클래스의 인스턴스를 사용할 필요가

의 현재 인스턴스를 사용해야합니다. 꼭 현재의 것은 아닙니다.

나는, 인스턴스가 (이 싱글이 아니라면) 인스턴스가 아닌 클래스

의 인스턴스를 얻기 위해 노력했다.

다음으로 Microsoft는 .NET Framework의 일부로 Form을 구현했습니다. Microsoft의 Form 클래스에는 updateGrid() 메서드가 없습니다.

양식을 만든 경우 양식이에서 Form으로 상속되고 updateGrid() 메서드가 추가되었습니다. 따라서 Form으로 전송하는 대신 수업에 캐스트하십시오. 그것은 Liskov substitution principle을 나누기 때문에

그래서 코드는이 깨끗한 코드가 아니라고

arbeitsbearbeitung frm = (arbeitsbearbeitung) this.Parent; 
frm.updateGrid(); 

주를 읽을 수 있습니다. 그러나 나는 그것이 당신의 주된 관심사가 아니라고 생각합니다.

+0

제 생각에는 보이는 폼에 변경 사항을 적용하고 싶기 때문에 클래스의 현재 인스턴스가 필요하다고 생각합니다. 아니면 내가 틀렸어? – Milanisius

+0

@Milanisius : 예, 양식을 하나만 열면 그 중 하나를 사용해야합니다. 즉, 새 인스턴스를 새로 만들면 도움이되지 않습니다. 그러나 일반적으로 (Forms가 아닌 클래스에 대해 말하고있었습니다) 많은 객체에 액세스 할 수 있습니다. –

0

당신은 일반 Formfrm를 선언됩니다

Form frm = (Form)this.Parent; 

문제는 Form 클래스 updateGrid라는 기능이 없습니다 것입니다. frm.updateGrid()이라고 말하면 컴파일러는 "frmForm이지만 FormupdateGrid"이 없다고 생각합니다. " 실제로 frm이 함수가 정의 된 Form의 특수 하위 클래스임을 알지 못합니다.

대신, 당신은 클래스 1의 실제 클래스와 frm를 선언해야합니다 당신이 frm.updateGrid()을 수행 할 때

MyCustomForm frm = (MyCustomForm)this.Parent; 

그런 다음, 컴파일러는 당신이 무슨 말을하는지 알 수 있습니다.

관련 문제