인라인 이벤트 핸들러를 작성하는 것이 나쁜 습관입니까?
인라인 이벤트 핸들러를 작성하는 것이 나쁜 습관입니까?
저에게는 다음과 같이 이벤트 핸들러에서 지역 변수를 사용하고 싶을 때 사용하는 것이 좋습니다.
나는 이것을 선호한다 :
// This is just a sample
private void Foo()
{
Timer timer = new Timer() { Interval = 1000 };
int counter = 0; // counter has just this mission
timer.Tick += (s, e) => myTextBox.Text = (counter++).ToString();
timer.Start();
}
대신 :
int counter = 0; // No need for this out of Boo & the event handler
private void Boo()
{
Timer timer = new Timer() { Interval = 1000 };
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
myTextBox.Text = (counter++).ToString();
}
두 가지주의 사항이 있지만 절대적으로 괜찮습니다.
- 클로저 내에서 로컬 변수를 수정하는 경우 수행중인 작업을 이해하고 있는지 확인해야합니다.
- 이벤트 구독을 취소 할 수 없습니다.
일반적으로 저는 정말 간단한 이벤트 핸들러 만 인라인 합니다. 더 많은 관련이있는 경우에는 람다 식 (또는 익명 메서드)을 사용하여 더 적절한 메서드가있는 메서드 호출을 구독합니다.
// We don't care about the arguments here; SaveDocument shouldn't need parameters
saveButton.Click += delegate { SaveDocument(); };
대부분의 경우 "timer_Tick ()"과 같은 별도의 메서드를 사용하는 것이 좋지만 OnTimerTick ()을 다음과 같이 호출해야합니다.
- 수업을 읽으면 밀이 더 명확 해집니다. "On"은 캔 이벤트 핸들러를 알려줍니다.
- "인라인"사례에서 메서드에 중단 점을 설정하는 것이 더 쉽습니다.
- 이 행사는 "Foo"계약자가 돌아온 지 오래되고, 계약자의 범위에서 실행되는 것으로 생각하지 않습니다.
그러나 이벤트가 인라인으로 선언 된 메서드가 반환되기 전에 만 발생하고 이벤트가 설정된 개체에 선언 메서드로 제한되는 범위가있는 경우 "인라인"버전이 더 좋다고 생각합니다. 따라서 저는 "정렬"메서드에 전달되는 비교 대리자에 대해 "인라인"을 사용하는 것을 좋아합니다.
두 개의 샘플을 함께 넣습니다. 두 번째 옵션 (당신이 선호하지 않는)이 가장 읽기 쉽다는 것은 분명합니다.
코드 가독성과 유지 관리가 매우 중요합니다. 가능한 한 이해하기 쉽게 단순하게 유지하십시오. 람다 식은 일반적으로 대부분의 사람들이 이해하기 어려운 것으로 간주됩니다. 비록 그들이 다른 사람들에게 당신을위한 제 2의 본성 일지라도 그렇지 않을 수도 있습니다.
참고 URL : https://stackoverflow.com/questions/4063753/is-it-bad-practice-to-write-inline-event-handlers
'IT Share you' 카테고리의 다른 글
클래스 본문에 선언 된 Ruby 메서드 호출 (0) | 2020.12.12 |
---|---|
터치 시대의 툴팁 (0) | 2020.12.12 |
doctype이 필요한 이유는 무엇입니까? (0) | 2020.12.12 |
gc ()와 rm ()의 차이점은 무엇입니까? (0) | 2020.12.12 |
Amazon ec2 사용자 데이터, 어떻게 작동합니까? (0) | 2020.12.12 |