inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

C# 프로그래밍 기초부터 실전 활용까지

정적 클래스, 확장 함수

정적 클래스, 확장 함수에서 매개변수로 this를 쓰는 이유?

해결된 질문

143

Lucas

작성한 질문수 27

0

안녕하세요 🙂

확장 함수 부분 설명해 주실 때 매개변수로 this string text 를 쓰셨는데, this가 왜 입력 되었는지 궁금합니다.

앞선 강의에서 setter 할 때 this 키워드가 클래스의 멤버임을 증명하는데 쓰이는 것 같은데, 여기서도 단순 그런 역할 인지요?

C# .net

답변 1

1

Kaburi

안녕하세요~ 정적 클래스의 "첫 번째 매개변수"에 사용되는 this 키워드는 다음에 정의된 타입에 대해서"확장 함수를 정의하겠다"는 특별한 의미를 지닙니다.

따라서 아래와 같이 사용할 수 있습니다.

// 정적 클래스

static class MyExtension
{
    // 확장 메서드 정의
    public static void Print(this string text)
    {
        Console.WriteLine(text);
    }
}
string name = "John";
name.Print();  // 확장 함수 사용

만약 this 키워드가 없다면?

// 정적 클래스

static class MyExtension
{
    // 일반 정적 메서드 정의
    public static void Print(string text)
    {
        Console.WriteLine(text);
    }
}
string name = "John";
// name.Print();  // 사용이 불가능해요!!!
MyExtension.Print(name); // 이렇게 사용해야 합니다.

그리고 this 다음에 나오는 타입이 int 라면 int 타입에 대해서 확장 함수가 사용이 가능합니다.

// 정적 클래스
static class MyExtension
{
    // int 타입에 대한 확장 메서드 정의
    public static bool IsEven(this int number)
    {
        return number % 2 == 0;
    }
}
int num = 4;
if (num.IsEven())
{
    Console.WriteLine($"{num}은(는) 짝수입니다.");
}
else
{
    Console.WriteLine($"{num}은(는) 홀수입니다.");
}

아래 코드는 사용이 불가능합니다.

string name = "John";
name.IsEven(); // 사용 불가능!!

 

이상입니다. ^^
또 궁금한 점이 있으시다면 언제든 질문 주세요. 감사합니다.

1

Lucas

와우 감사합니다! 궁금증이 해결되었습니다! 👍

UI있는 Designer 오류 발생 질문입니다.

0

73

2

CancelationTokenSource 질문이있습니다.

0

52

2

비동기 2강 UI가 없는 환경 질문입니다.

0

67

1

16_Collection 에서 Stack_ 후입선출에 질문입니다.

0

59

2

꼭 vs2022 로 다운받아야 하나요?

1

116

2

공부 문의드립니다,,

0

77

2

똑같이 따라서 ^1 했는데 에러가 떠요.

0

69

1

영상 구문 그대로 따라했는데 에러가 나요.

0

56

1

30강 듣고 질문이있습니다.

0

63

1

오늘 첫 강의를 들었습니다.

0

81

2

159번 강의 보는데 궁금한게 있습니다

0

63

3

asp.net blazor 강의는 현재 계획없으신가요

0

78

2

강의자료

1

171

2

메소드 호출이 되는이유?

0

77

1

~ 연산자 이해가 안되요

0

166

5

thread join 사용

0

178

4

블로그 글

0

108

2

Delegate 내용은 어디서 다루나요?

0

107

2

Xunit private 메서드 테스트

0

121

2

자원정리 개념

0

113

2

강의 영상 오류

0

89

1

this string text의 동작 과정이 궁금합니다.

0

128

2

type변환 as에서 string과 int, int? 차이 질문입니다.

0

199

2

접근 제어자로 필드를 만들어 파생 클래스에서 사용할 때 질문입니다.

0

115

2