C#.NET Q&A

C# Winform의 Virtual, Override 관계 문의 고무랭이 평점: 없음 조회: 132

 안녕하세요?
첨부된 프로젝트와 같이 Winform 프로젝트에 Base form, Derived form을 만듭니다.
     * Derived form: 메인 호출
     * Base form: Derived form 생성자에 의해 호출
     * 첨부된 프로젝트의 코드가 아래 작성된 코드와 완전히 같지 않습니다.

그리고 Derived form에서 기본 Form 상속 대신 Based form을 상속 받습니다.

Base form에 timer와 button을 만듭니다.
     * timer는 꼭 Base의 생성자에서 실행해야 합니다.
     * 다른 button 이벤트에 의해 실행되면 Derived에 전달이 안 됨.
그리고

public virtual void UpdatedByClick()
{
     btnSend.Text = "Updated";
}
을 만들어 button의 Click 이벤트에 넣습니다.
private int count=0;
public virtual void UpdatedByTick()
{
     this.Text = count++.ToString();
}
을 만들어 timer의 Tick 이벤트에 넣습니다.

Derived form에서 각 함수를 재정의합니다.
public override void UpdatedByClick()
{
     btnSend2.Text = "Updated";
}
private int count=0;
public override void UpdatedByTick()
{
     this.Text=count++.ToString();
}

여기에서 질문드립니다.
상기와 같이 코딩을 하고 결과를 보면 Derived form의 UpdatedByTick()은 Base form의 timer tick에 의해 자동 호출되어 form의 title에 카운팅이 됩니다. -> 이해 안되는 부분
그러나 UpdatedByClick()은 Base form의 button click에 의해 호출 되지 않습니다. -> 이해는 됨.

상기의 차이가 무엇인지 굼긍합니다. (첨부 파일을 참고 하신다면 도움이 되실 것 같습니다.)
태그 : c#, override virtual,
작성자 정보
고무랭이
Level 8
 [EXP.4/14]

메일:  비공개
글등록 +12 60 덧글등록 +3 12
자기소개
반가워요~~
글 공유하기 |
  tweet facebook
2019-01-08 오전 7:42:35
나도한마디
사용자
foxi            [2019-01-08]
Level 2
 [EXP.11/16]
일부 코드는 된다고 하셨지만 소스를 보니까 Derived 폼에서 var frmBase = new FrmBase(); 라고 선언하셨던데요.
이렇게는 부모클래스에서 자식 인스턴스의 메소드가 실행되게 할 수없죠.
FrmBase frmBase = new FrmDervied(); 이면 몰라도..
사용자
고무랭이            [2019-01-09]
Level 8
 [EXP.4/14]
답변 감사 드립니다.
Derived 폼안에서 Derived 폼의 인스턴스를 만들수 없을 것 같은데요. (실제로도 에러 발생)
제가 문의 드리고자 하는 것은 Base 폼안에서 이벤트가 발생했을 때 Derived 폼으로 전달되는지에 대한 여부입니다.
기본 생각으로는 안될 것 같습니다만 (첨부된 프로젝트의 click 이벤트 처럼) 타이머 이벤트는 되고 있어서 이부분이 궁금했던 것입니다. :)
사용자
foxi            [2019-01-10]
Level 2
 [EXP.11/16]
당연히 재귀적인 호출이 되어 안되는거구요. 가상함수와 오버라이드는 OOP의 다형성을 보장하기위한 언어적 차원의 문제이고 이벤트는 프레임워크 차원의 문제입니다. 닷넷의 이벤트에 대해 우선 학습하시고 컨트롤의 이벤트 메소드에서 virtual과 override는 어떻게 동작되는지 연구해보시길 조언드립니다.
사용자
고무랭이            [2019-01-10]
Level 8
 [EXP.4/14]
foxi님 추가적인 답변 및 조언 감사드립니다.
지속적인 공부의 절실함을 더욱 느낍니다.
Base 폼 타이머 이벤트의 Virtual 함수가 Derived 폼의 Override 함수를 호출할 수 있는 건 여전히 이해가 되지 않네요.
사용자
foxi            [2019-01-10]
Level 2
 [EXP.11/16]
FrmBase 타입의 frmBase 인스턴스가 FrmDerived의 UpdataButtonText() 메소드 호출을 할 수 있다고 하시지만.. 소스를 봤을땐 절대 안되는건데 확고하셔서.. 다시한번 virutal와 override 함수쪽에 각각 출력값을 다르게 하여 의도하신바로 동작되는지 확인해보시겠어요? 이거.. 제가 원 질문의 의도를 잘못파악하고 있는거라면.. 좌절각인데..ㅠ
사용자
고무랭이            [2019-01-11]
Level 8
 [EXP.4/14]
또 시간 내어주셔서 답변 달아주셨네요.
첨부 파일의 프로젝트에서 Button event는 Base 폼에 의해 호출이 안되지만, Timer event는 호출되는 차이로 인해 혼동이 돼서 여쭈어 본 것입니다.
혹시 가능하시다면 프로젝트를 열어 결과를 확인하시면 조금 더 제가 질문 드린 의도를 파악하시기가 쉽지 않을까 생각합니다.
감사합니다. :)
태그로 엮인글
[C#.NET Q&A] c# 윈폼에서 차트를 그리려 하는데[1]  엘리엇
[C#.NET Q&A] 폼 showdialog 처럼 메세지박스도 가능한가요?[2]  엘리엇
[C#.NET Q&A] c#으로 mysql 테이블 행 개수를 나타내는방법[1]  합금방패
[C#.NET Q&A] 랜덤으로 저장된 배열값을 호출하는 방법이 궁금합니다.[1]+4  합금방패
[구인&교육정보] [건설사/당산역] 건설사 ERP 운영 C#/ .NET초급1명 모집(즉시-1년)  메이커스
[자유게시판] [대구/경북지역] 시샵 개발자 모임을 만들려고 합니다.   이도일
[C#.NET Q&A] c# DB를 datagridview와 연동 질문입니다.[1] 파일첨부 합금방패
[C#.NET Q&A] c#과 mysql 연동에러 질문입니다.[2]+2 파일첨부 합금방패
[구인&교육정보] 서울 양재] 동원그룹 인사시스템 개발/운영 경력 정규직 채용  moon02
[C#.NET Q&A] SQL구문오류 도와주세요 ㅜㅜ[1]  방랑이z
글리스트
C# Winfrom Mouse Event Conflict 현상..[1]+1  범범조조
c# 차트에서 클릭시 x축 좌표 찍기.[1]  비베씨샾
FTP 파일다운로드 소스 이해가 안가는게 있는데 설명 가능할까요??[2]  빠라밤바
TFS 2013 관련 질문  Windy
슬라이더 값에 따른 rawimage 출력 파일첨부 착한어른이
xml파일생성관련하여 질문드립니다(xml내용 작성법)[3]  맨살링
c# 윈폼에서 차트를 그리려 하는데[1]  엘리엇
C# graphics 객체 선택   메론빵맨
사용자 콘트롤 속도 문제.  hoon
for 문에서 간단하 로직 질문드려요.[1]  키쿄쿄쿄키쿗
 ★현재글->   C# Winform의 Virtual, Override 관계 문의[2]+4 파일첨부 고무랭이
c# 윈폼 해상도 질문이 있습니다...[1] 파일첨부 이재추닝
c# 에서 OnPaint가 호출되지 않는데요...  csharpmas
CellValueChanged 이벤트 수량*단가 금액계산[2]+2  고재원
C# 달력질문입니다.[1]  dmekk
프로그램 처리 방법 질문드립니다.[1]  jellyfish
cs 페이지에서 값 확인[1]  훈쓰쓰훈
한영전환오류[1]  비베씨샾
C# 엑셀리딩관련 질문드립니다.  suraits
datagridview 에러입니다.[2]+1 
c# WPF 사이즈 조절 이벤트 관련 질문입니다.[1]  오마르