Microsoft MVP성태의 닷넷 이야기
EventHandler 관련 [링크 복사], [링크+제목 복사],
조회: 12686
글쓴 사람
따봉이
홈페이지
첨부 파일
 

안녕하세요.
항상 감사하고 있습니다.

아래 실제 사용되는 건 똑같은거 같은데 뭐가 다른걸까요?

1. public EventHandler TopBarSystemInitClickEvent { get; set; } = null;
2. public event EventHandler TopBarSystemInitClickEvent = null; //event 가 붙으면 get;set;을 할 수 없음
3. public EventHandler TopBarSystemInitClickEvent ; // 다 빼도 잘 사용됨


Invoke : TopBarRunInspectionClickEvent?.Invoke(this, EventArgs.Empty);
1,2,3 다 이벤트 전달이 잘 되는데
이럴거면 그냥 세번째것만 하는게 간단하고 편한데 왜 굳이 1, 2번 같이 사용하기도 하는 걸까요?








[최초 등록일: ]
[최종 수정일: 8/4/2022]


비밀번호

댓글 작성자
 



2022-08-04 10시54분
우선, 이렇게 분류가 됩니다.

1번: 자동 공용 속성(property)
; https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

2번: 이벤트
; https://learn.microsoft.com/ko-kr/dotnet/csharp/events-overview

3번: 필드
; https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/fields

기본은 3번입니다. 단지, 그렇게 필드를 직접적으로 노출시키지 않기 위해, 즉, OOP의 원칙인 정보 은닉을 위해 필드를 public으로 두지는 않고 대신 private으로 필드를 정의한 다음 외부에서 접근하기 위한 수단으로 get/set 메서드를 제공하게 됩니다.

하지만, 그 get/set 메서드의 정의가 번거롭기 때문에 기본 코드만 포함돼 있다면 빠르게 정의하는 용도로 3번을 1번과 같은 식으로 바꿔 씁니다.

반면, 2번은 완전히 다릅니다. 2번의 경우 "event" 유형으로 정의하는 것이기 때문에 "공용 속성"이 아닙니다. 따라서 get/set도 정의할 수 없습니다. delegate와 event의 차이점은 문서를 통해 확인하시고.

------

사실, 위의 사항들은 기본 문법에 해당하는 질문입니다. 아마도 이런 의문들은 코딩을 하시면서 계속 느끼게 될 텐데요, 따라서 가능한 책을 통해 (꼭 제 책이 아니더라도... ^^) 전체적인 문법을 한번 정리하시는 것을 권장합니다.
정성태

1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5894송부장4/14/202314739[질문] Visual Studio 2022에서 '도구 상자 항목 선택'의 'COM 구성 요소' 탭에서 ActiveX 목록이 보이지 않습니다. [3]파일 다운로드2
5893감사합니...4/14/202312374오라클 OLEDB방식 접속 후 SELECT 'TEST' TEST_VALUE FROM DUAL의 값이 이상합니다. [1]
5892한무4/14/202312210C# 으로 백그라운드에서 워드를 실행하여 매크로 실행이 가능 할까요? [2]
5891리세4/14/202313720안녕하세요.C# 서버프로그램에서의 Mysql 쿼리문제(다중쿼리 실행)에 대해 문의드립니다. [2]
5890guest4/14/202314750C# 프리랜서로 돈 벌려면 성태님 책 마스터하면 되나요? [6]
5889전예찬4/14/202312315C# 파일 복사 관련 질문 드립니다. [3]
5888정경구4/12/202312448C# 첫 환경 세팅과 관련해서 [4]
5887HAN4/12/202312540안녕하세요 파이썬도 공유 가능 할까요? [1]
5886guest4/11/202314728필요한 어셈블리만 다운로드 및 재로딩하는 방법에 관하여 [2]
5885guest4/11/202312500c#으로 드림위버같은 거 만들어볼려는데요 [6]
5884궁금이4/11/202313064부모 클래스에서 예외 발생시 힙 영역에 할당 ? [2]
5883코딩초짜4/9/20231259410c언어 usleep 에 대해서 요 [2]
5882조은현4/7/202311988선생님 안녕하세요! wpf의 성능 개선에 대해서 질문드려요! [1]파일 다운로드1
5881guest4/6/202313104static method - <에러메시지 Extension method must be defined in a non-generic static class> [4]
5880유비4/4/202312024WPF DataGrid CollectionView, IEditableCollectionView 관련 문의 [1]
5879guest4/4/202314072Async method의 에러 표시 [3]
5878guest4/3/202314443C#으로 CMOS 설정 변경가능한지요? [4]
5875guest4/2/202314663성태님 책을 완독 하고 Static [7]
5874민성4/1/202313097안녕하세요 질문 하나만 드릴깨요~ [1]
5873guest3/31/202314691제어판에서 삭제불가 MS Edge ---> 레지스트리 편집기에서도 안보임 [6]파일 다운로드1
58723/31/202313868web config 파일 확인부탁드려요 [6]
58713/31/202313066web config 파일 수정이요 [2]파일 다운로드1
5870guest3/30/202312804.NET Core SDK 삭제 시 주의 사항 [4]파일 다운로드1
5869guest3/30/202313410Dictionary의 Update 그리고 Foreach [7]
5868guest3/29/202312525Speech Recognition과 Form1 그리고 정확도 [4]파일 다운로드1
5866월급쟁이3/28/202312286cmake 크로스 컴파일 관련하여 질문이 있습니다 [1]
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...