바로 뒤의 문자열을 C# 코드의 식별자(변수 이름, 메서드 이름, 클래스 이름 등)로 바라봅니다.
@()
괄호 안에는 기본적으로 @과 같고, 여기에 표현식(expression)을 넣을 수 있습니다.
그러나, 괄호 이후는 문자열로 봅니다. 4번 예시에서,
@( ) => OnClicked( )
위 표현은 아래의 C# 코드와 같은 에러가 있습니다.
Action action = () => { } => OnClicked( );
문자열
기본적으로 @(문자열) 로 변환됩니다.
참고로, onclick 속성의 형식은 EventCallback 이라 @( )과 완전히 동일하지만, 요소의 속성이 문자열 형식일 경우, 코드에서 못 찾으면 그 자체를 문자열 값으로 인식합니다. 이 경우, 그 문자열은 DOM 요소에 전달되고, 브라우저는 비정상적인 속성 값에 대해 별도의 처리나 에러를 발생시키지 않고 무시합니다.
정답
힌트를 드렸 듯, onclick 속성은 EventCallback<MouseEventargs> 이고, 이는 EventCallback 의 파생 클래스입니다.
위 둘은 각각 Action<T>, Action 형식과 일치하기 때문에, 이 대리자들과 형식이 같은 메서드나 람다 표현식 (무명 메서드 포함) 을 입력할 수 있습니다.
이제 정답 확인해보겠습니다.
@OnClicked :가능
OnClicked : 가능
OnClicked( ) : 불가능
OnClicked 는 void 를 반환하기 때문에, 대리자 값을 넣어야 하는 요구 조건에 맞지 않습니다.