가정
의 우리가 인터페이스를 가지고 있고, 정의는 다음 확장 메서드는 인터페이스 말했다 가정하자 ( 자신의 구현이 중요하지)public interface IPerson;
public class IPersonExtensionMethods
{
public static bool SayHello(this IPerson talker, IPerson listener);
public static bool SayGoodbye(this IPerson talker, IPerson listener);
}
문제
두 확장 방법 모두 IPerson
의 매개 변수를 두 개 허용하고 bool
을 반환한다는 점에서 근본적으로 같습니다. 다음과 같이 우리가 속기로 if
문을 설정하는 경우에는
Func<IPerson, IPerson, bool> whatShouldWeSay;
if (sayHello)
{
whatShouldWeSay = IPersonExtensionMethods.SayHello;
}
else
{
whatShouldWeSay = IPersonExtensionMethods.SayGoodbye;
}
: 지금, 우리는 우리가 사용할 수있는 유형 Func<IPerson, IPerson, bool>
의 대리자로 확장 방법 중 하나를 할당 할 가정하자
Func<IPerson, IPerson, bool> whatShouldWeSay = (sayHello)
? IPersonExtensionMethods.SayHello
: IPersonExtensionMethods.SayGoodbye;
Type of conditional expression cannot be determined because there is no implicit conversion between 'method.group' and 'method.group'
질문
,369 : 우리는 컴파일 오류 메시지가이 오류가 발생하는 이유는 무엇입니까? 델리게이트가 확장 메서드라는 특성 때문입니다. 또는 그 결과가 short-hand if
진술에 어떻게 결정 되었는가? 아니면 완전히 다른 무엇입니까?
감사합니다, 그러나 이것은이 여기에 간단한 방법으로 표시 할 수 있습니다 , 캐스트에 상관없이, 틀림없이? – Richard
그들은 똑같은가요? 두 개의 다른 * 메소드를 반환하고 있습니다. 할당 후에는 동일한 'Func' 유형으로 묶입니다. 흥미롭게도 –
; 두 번째 결과 인 'SayGoodbye'만 전송하면 컴파일됩니다. 캐스팅 한 사람이 후자를 정의할까요, 아니면이 경우에는 이전을 정의할까요? – Richard