문제

나는 여러 차례와 여러 위치에서 일반적인 이벤트를 발사 할 때 읽는 것을 기억합니다.

protected virtual OnSomethingHappened()
{
    this.SomethingHappened(this, EventArgs.Empty);
}

흥미로운 이벤트 args가없고 null이없는 경우 e는 eventargs.empty해야합니다.

나는 내 코드의 지침을 따랐지만 그것이 왜 그것이 선호하는 기술인지 명확하지 않다는 것을 깨달았습니다. 명시된 계약이 왜 null보다 eventargs를 선호합니까?

도움이 되었습니까?

해결책

NOT NULL의 추론은 매개 변수로 전달 될 때 NULL 참조 예외를 잠재적으로 처리 해야하는 방법이 예상되지 않는다고 생각합니다.

당신이 null을 통과하고 메소드가 e로 무언가를하려고 시도하면 null 참조 예외가 발생합니다.

다른 팁

EventArgs.Empty 인스턴스입니다 널 객체 패턴.

기본적으로, 사용할 때 NULL을 확인하지 않기 위해 "값 없음"을 나타내는 객체가 있습니다.

나는 믿는다 EventArgs.Empty 아무도 필요하지 않더라도 이벤트와 논쟁을 통과하는 협약을 유지하는 데 사용됩니다.

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

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

컨벤션을 유지하는 비슷한 예를 제공하기 위해 우리 팀은 string.Empty 다른 코더가 사용할 수 있으므로 문자열을 초기화하려면 newString = ""; or newString = " "; or newString = null;, 모두 검사 조건에 대해 다른 결과를 생성 할 수 있습니다.

사용해야 할 이유 (약간의 소포 적) 이유 EventArgs.Empty vs new EventArgs() 전자는 새로운 것을 초기화하지 않는다는 것입니다 EventArgs, 약간의 메모리를 저장합니다.

일반 목적 방법을 사용하는 경우 EventHandler 모든 이벤트 핸들러에서 호출되는 서명과 object sender 그리고 EventArgs e, 그것은 호출 할 수 있습니다 e.ToString(), 예를 들어, 널 포인터 예외에 대해 걱정하지 않고 로깅 이벤트를 위해.

나는 "eventargs.empty"대신 오랫동안 "new eventargs ()"을 사용했습니다 ... 중요한 것은 널 예외를 유발하지 않는 것을 전달하는 것입니다.

Albahari Book에서 : "in order to avoid unnecessarily instantiating an instance of EventArgs."

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top