this.메서드()를 호출했는데 다른 클래스의 메서드가 호출됩니다.

안녕하세요.

프리로 첫 출근해서 소스 분석 중인데요
디버깅 하다가 도저히 이해가 안되는 게 있어 질문드립니다.

this.GetAttribute(); 라는 함수가 있는데 f12나 디버깅으로 호출 함수 타고 들어가면
전혀 다른 클래스의 GetAttribute 로 이동합니다.

호출된 GetAttribute는 static 클래스의 static 메서드인데
this 키워드가 사용된 클래스는 폼을 상속받은 클래스 입니다…

어떻게 이런 일이 일어나는 건지 궁금합니다.

–코드–

namespace AA.CC.BB {
public partial class DefaultBr : Form, IAction
{
public DefaultBr()
{
// … 생략
string aa = this.GetAttribute(“aa”);
// … 생략
}
}
}

namespace AA {
public static class CoreExtCfg
{
public static string GetAttribute(/* 생략 */)
{
}
}
}

이런 형태입니다.

좋아요 1

코드 한줄 없이는

그 누구도 알 수 없습니다.

코드를 첨부해 주시지 않으면 무슨 상황인지 정확하게 답변드릴 수 없습니다.

해당 클래스의 메소드 안에 static 메서드를 호출하는 구문이 있을 수도 있고, 부모 클래스의 GetAttribute 메서드에서 static 메서드를 호출하는 구문이 있을 수도 있겠죠. 디버깅 방법은 아시는 것 같으니 한 줄씩 넘겨보시면 답이 나올 듯합니다.

namespace AA.CC.BB {
public partial class DefaultBr : Form, IAction
{
     public DefaultBr()
     {
          // ... 생략
          string aa = this.GetAttribute("aa");
          // ... 생략
     }
}
}

namespace AA {
public static class CoreExtCfg
{
     public static string GetAttribute(/* 생략 */)
     {
     }
}
}

이런 형태입니다.

다른 코드가 첨부되어 있지 않아 확답은 못하겠지만 확장 메서드 같네요.

CoreExtCfg 클래스의 GetAttribute 시그니처가 아래와 같은 식이면 확장 메서드입니다.

public static string GetAttribute(this Form 변수이름, ...)
public static string GetAttribute(this DefaultBr 변수이름, ...)
public static string GetAttribute(this IAction 변수이름, ...)

https://www.csharpstudy.com/CSharp/CSharp-extension-method.aspx

그리고 코드를 첨부하실 때 syntax highlight를 이용하시면 코드 가독성 향상에 도움이 됩니다.
```csharp

코드

```

좋아요 3

아, 네.
맞습니다. vs에서도 (확장)이라고 표기되는게 확장메서드를 의미하는 건가 보네요.
몰랐던 건데 한 번 잘 읽어보겠습니다.
정말 감사합니다.

생략이라 적어주신게 this 키워드가 포함되어 있는 확장 메서드 아닌가요?

코드 가독성을 위해 신택스 문법을 사용해 주시면 더 좋을 것 같구요

최소한의 샘플 예제라도 첨부해 주시는게 더 좋습니다.!

좋아요 2

아마도 확장메서드인 것 같습니다.
그게 뭔지 몰랐는데 댓으로 확인해서 알게됐습니다.
신택스 문법도 한 번 알아보겠습니다.
도움주셔서 감사합니다.