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

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

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

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)
5621장성욱3/8/20224687c# 로그 관련 질문 [1]
5620김민아3/7/20224708안녕하세요 비관리 객체를 반환하는 메소드 호출 시 궁금한 점이 있어서 질문드립니다 [2]
5619팡팡이3/3/20225986RSA 문의드립니다. [3]
5618김기헌3/2/20224569안녕하세요 생성자 옆에 this 키워드를 붙여 생성자를 여러 개 호출 시 질문드립니다 [2]
5617Edun2/25/20224719ArgumentOutOrRangeException에러 발생 [2]파일 다운로드1
5616csha...2/24/20224623readonly struct로 선언된 구조체를 특정 클래스에서 멤버변수로 가지는 경우 [1]
5615장성욱2/22/20226808SetThreadAffinityMask를 이용한 쓰레드 지정하는 방법에 대해 궁금합니다. [4]
5614민우2/22/20226120SSL 통신 문의 [6]
5613김인태2/22/20224656서버와 PC 간의 어플리케이션 성능 차이 [1]
5612팬입니다2/20/20224481Kastrel 서버 관련 [1]
5611차가워2/19/20224696stopWatch 늘어짐 문의 [3]
5610차가워2/18/20224596Stopwatch 늘어짐 문제 [1]
5609cs린이2/15/20224910c# 함수의 호출 방식에 대해 궁금합니다! [2]
5608지호2/10/20225403시작하세요 C# 8.0 중 제네릭타입의 IEnumerable [3]파일 다운로드1
5607이로운2/10/20224691안녕하세요. 궁금한게 있어서 질문드립니다. [1]
5605강성봉2/10/20224684TCP PSH flag 패킷 수신 에러 [1]
5604LW2/9/20224829VISUAL STUDIO 2019 ==> 2020 설치시 오류가 생겨서 문의드립니다. [3]
5603김진명2/9/20226027C# 10.0 출간은 언제쯤 계획하고 계신가요? [1]
5602신갑영2/8/20224918윈폼에 대해서 질문 드립니다. [1]
5601김인태2/4/20225134setup project 관련 [7]
5600itkim2/3/20225961윈도우 서버 계정 패스워드 인증 문의 [5]
5599레드골드2/3/20226381c#으로 ms word 제어 가능할까요? [6]
5598jaew...2/2/20225202Dictionary는 참조형식인가요?? [1]
5597재원2/2/20225520c# 9.0에 대한 내용을 받을 수 있나요? [1]
5596kss1/26/20225287듀얼 모니터 환경에서 wpf 프로그램 크기 변경 [2]
5594mira...1/25/20224929안녕하세요 try~catch 와 SuspendLayout~ResumeLayout 간 호출 문의드립니다! [2]
1  2  3  4  5  6  7  8  9  10  11  12  [13]  14  15  ...