null 대신 EventArgs.Empty를 사용하는 이유는 무엇입니까?
여러 차례, 여러 장소에서 일반적인 이벤트를 시작할 때 다음과 같은 내용을 읽은 것을 기억합니다.
protected virtual OnSomethingHappened()
{
this.SomethingHappened(this, EventArgs.Empty);
}
e는 null이 아닌 흥미로운 이벤트 인수가없는 경우 EventArgs.Empty 여야합니다.
내 코드의 지침을 따랐지만 왜 이것이 선호되는 기술인지 명확하지 않다는 것을 깨달았습니다. 명시된 계약이 null보다 EventArgs.Empty를 선호하는 이유는 무엇입니까?
NOT NULL 뒤에있는 이유는 매개 변수로 전달 될 때 메서드가 잠재적으로 null 참조 예외를 처리 할 필요가 없다는 것입니다.
null을 전달하고 메서드가 e로 무언가를 시도하면 null 참조 예외가 발생하지만 EventArgs.Empty에서는 그렇지 않습니다.
EventArgs.Empty
Null 개체 패턴 의 인스턴스입니다 .
기본적으로 사용할 때 null 확인을 피하기 위해 "값 없음"을 나타내는 개체가 있습니다.
나는 EventArgs.Empty
아무 것도 필요하지 않더라도 이벤트와 함께 인수를 전달하는 규칙을 유지하는 데 사용 된다고 생각 합니다.
Mitchel Sellers는 내 게시물 중간에 내 이유의 나머지 절반을 게시했습니다. 메소드가 해당 인수로 무언가를 시도하고 수행하는 경우 null 참조 예외를 방지합니다 (null인지 확인하는 것 외에도).
EventArgs.Empty
기본적으로 추가 정보없이 전역 적으로 정의 된 이벤트 인수의 작업을 수행합니다.
규칙을 유지하는 유사한 예를 제공하기 위해 우리 팀은 string.Empty
문자열을 초기화하는 데 사용 합니다. 그렇지 않으면 다른 코더가를 사용할 수 있으며 newString = ""; or newString = " "; or newString = null;
, 모두 다른 검사 조건에 대해 다른 결과를 생성 할 수 있습니다.
EventArgs.Empty
vs 를 사용하는 (약간 현명한) 이유 new EventArgs()
는 전자가 new를 초기화하지 않아 EventArgs
약간의 메모리를 절약하기 때문입니다.
당신은이 범용 방법을 사용하는 경우 EventHandler
모든 이벤트 핸들러에서라고하고 모두를 통과 서명을 object sender
하고 EventArgs e
, 그것을 호출 할 수 있습니다 e.ToString()
널 포인터 예외에 대한 걱정없이, 이벤트 로깅을 위해, 예를 들어,.
"EventArgs.Empty"대신 오랫동안 "new EventArgs ()"를 사용했습니다. 중요한 것은 Null 예외를 발생시키지 않는 무언가를 전달하는 것입니다.
Albahari 책에서 : "in order to avoid unnecessarily instantiating an instance of EventArgs."
참고 URL : https://stackoverflow.com/questions/188692/why-use-eventargs-empty-instead-of-null
'code' 카테고리의 다른 글
Facebook은 캔버스 페이지의 iFrame에 대한 교차 도메인 쿠키를 어떻게 설정합니까? (0) | 2020.11.12 |
---|---|
.ix ()가 더 빠르고 정수 및 레이블 액세스를 지원하기 때문에 .loc () 및 .iloc ()보다 항상 낫습니까? (0) | 2020.11.12 |
EventTrigger로 속성 설정 (0) | 2020.11.12 |
Excel VBA에서 JSON 구문 분석 (0) | 2020.11.12 |
HTTP 헤더의 Set-Cookie는 AngularJS에서 무시됩니다. (0) | 2020.11.12 |