2013-06-16 1 views
1

간단한 상속에 문제가 있습니다. 문제는 매우 간단합니다.파생 클래스에 상위 개인 속성이 있습니다.

나는 에서 파생 된 이름이 MainFormParent Form입니다.

MainForm : System.Windows.Forms.Form 

둘째는 ChildFormMainForm로부터 유도된다.

ChildForm : MainForm 

MainForm이 클래스에 대해 분명히 private이다 그것에 버튼, 아무것도 없습니다. 이 버튼은 ChildForm으로 전화합니다.

enter image description here

는 그러나 ChildForm을 만든 후 그것 또한 해당 버튼을 가지고 있으며, 나는 그와 함께 어떤 일을 할 수 없습니다. 디자인 패널에도 없지만 응용 프로그램을 실행하면 작동하고 ChildForm이 호출됩니다. 나는

enter image description here

그래서 내가 어떻게 ChildForm에서 제거하고 그 자리에 유지할 수 ... 전혀 그것을 알아낼 수 있을까? 왜 개인 회원이 그 범위 밖에서 보여지고 있는지?

답변

2

전혀 보이지 않습니다. ChildForm의 인스턴스를 만들면 버튼과 같은 부분이있는 MainForm의 인스턴스가 생성됩니다. '비공개'범위는 개발시 해당 버튼에 액세스하는 방법에 영향을 미칩니다. 즉, 양식 클래스 외부에서 프로그래밍 방식으로 액세스 할 수 없습니다.

하위 폼에서 단추의 표시 여부를 설정할 수있는 공용 또는 보호 된 속성을 만들면됩니다. 자식 폼에서이 속성을 원하는 기본값으로 토글 (설정) 할 수 있습니다.이 작업을위한 좋은 장소는 생성자 또는 폼 초기화 루틴입니다. 사용중인 UI 기술에 따라 단추의 가시성을 속성에 직접 바인딩하거나 폼의 속성이 변경 될 때 프로그래밍 방식으로 단추의 속성을 설정할 수 있습니다.

+0

인스턴스를 생성하면 왜 삭제할 수 없습니까? 왜 내가 그것을 옮길 수없는거야? 그리고 친절하게도 마지막 단어를 더 명확하게해라.'자식 폼의 속성을 덮어 쓰고 기본값을 false 또는 hidden으로 설정할 수있다. ' – Shaharyar

+0

@Shaharyar 버튼을 숨길 수는 있지만 MainForm 내에서 버튼을 숨길 수있다. 따라서 주 양식 외부에서는 접근 할 수 없다). 나는 내 대답을 약간 업데이트했다. – slugster

+0

글쎄 !! 아주 좋은 대답. 나는 그것을 ChildForm 생성자에서'protected'하고'폐기했다. – Shaharyar

0

하위 양식이 기본 양식에서 상속해야하는 이유는 무엇입니까? 내가 아는 바로는, Main form에는 자식 폼 인스턴스를 생성하고 표시하는 버튼이 있습니다. 결국 을 사용하지 못하게되면 양식에서 일이 실제로 상속되는 것이 아닙니다.

ChildForm을 자체 폼 (System.Windows.Forms.Form MainForm 대신), 이것은 ChildForm에서 버튼을 제거하고 MainForm의 버튼을 public/protected로 설정하지 않아도됩니다.

+0

내 응용 프로그램이 현재 개발 중입니다. 필자는 다른 파생 클래스를 호출 할 필요가있는 더 많은 메서드를 만들어야합니다. – Shaharyar

+0

물론 있지만이를 달성 할 수있는 다른 방법이 있습니다.메인 폼에만 존재하는 로직을 호출하고자한다면, 그것은 메인 폼을 리팩토링하고 (다른 클래스의) 메인 폼을 노출시키는 표시입니다. 상속은 그것을하는 한 가지 방법이지만, 최선의 방법이라고 생각하지 않습니다. –

관련 문제