code

null 대신 EventArgs.Empty를 사용하는 이유는 무엇입니까?

codestyles 2020. 11. 12. 08:15
반응형

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.EmptyNull 개체 패턴 의 인스턴스입니다 .

기본적으로 사용할 때 null 확인을 피하기 위해 "값 없음"을 나타내는 개체가 있습니다.


나는 EventArgs.Empty아무 것도 필요하지 않더라도 이벤트와 함께 인수를 전달하는 규칙을 유지하는 데 사용 된다고 생각 합니다.

Mitchel Sellers는 내 게시물 중간에 내 이유의 나머지 절반을 게시했습니다. 메소드가 해당 인수로 무언가를 시도하고 수행하는 경우 null 참조 예외를 방지합니다 (null인지 확인하는 것 외에도).

EventArgs.Empty 기본적으로 추가 정보없이 전역 적으로 정의 된 이벤트 인수의 작업을 수행합니다.

규칙을 유지하는 유사한 예를 제공하기 위해 우리 팀은 string.Empty문자열을 초기화하는 데 사용 합니다. 그렇지 않으면 다른 코더가를 사용할 수 있으며 newString = ""; or newString = " "; or newString = null;, 모두 다른 검사 조건에 대해 다른 결과를 생성 할 수 있습니다.

EventArgs.Emptyvs 를 사용하는 (약간 현명한) 이유 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

반응형