C#의 확장 메서드 동작에 대해 궁금합니다. 아래 예제를 참조하십시오 :C# 확장 메서드가 예상대로 작동하지 않습니다. - 예를 참조하십시오.
static string ExtendedToString(this object oObj)
{
return "Object";
}
static string ExtendedToString(this Array oArray)
{
return "Array";
}
// Example 1: int array - working as expected.
int[] o = new int[] { 1, 2, 3 };
o.ExtendedToString(); // returns "Array"
// Example 2: array as object - did not expect the result.
object o = new int[] { 1, 2, 3 };
o.ExtendedToString(); // returns "Object"
int []의 오브젝트 확장 메서드가 호출 된 이유는 무엇입니까 (마지막 경우)?
object o = new int[] { 1, 2, 3 };
그게 이유 : 당신이
int[] obj = o as int[];
obj.ExtendedToString(); // returns "Array"
해상도가 (정적)에 따라대로가
를 입력 할 수 있습니다o.ExtendedToString(); // returns "Object"
하지만 객체로 O를
의미가 있습니다. 과부하가 걸리는 가상의 방법처럼 보이기 때문에 이상한 것입니다.하지만 그렇지 않습니다. 그것은 혼란스러운 부분이었습니다. 감사. – Krumelur
@Krumelur, 그냥 확장 메서드가 정적 메서드를 호출하는 구문 설탕이라는 것을 명심하십시오. –
맞아요. 그것이 내가 의미하는 바입니다. 그것들을 사용할 때 그들은 정적과 같은 것을 보지 않습니다. – Krumelur