C#.Net에서 프로토타입 메서드(예: JavaScript)를 어떻게 만들 수 있나요?

StackOverflow https://stackoverflow.com/questions/4610

  •  08-06-2019
  •  | 
  •  

문제

C#.Net에서 프로토타입 메서드를 만드는 것이 어떻게 가능합니까?

JavaScript에서는 다음을 수행하여 문자열 개체에 대한 다듬기 메서드를 만들 수 있습니다.

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

C#.Net에서 이 작업을 어떻게 수행할 수 있나요?

도움이 되었습니까?

해결책

해당 클래스의 소스를 변경하는 경우를 제외하고는 .NET의 기존 개체나 클래스에 메서드를 동적으로 추가할 수 없습니다.

그러나 C# 3.0에서는 확장 메서드를 사용할 수 있습니다. 바라보다 새로운 메소드와 비슷하지만 컴파일 타임의 마법입니다.

코드에 대해 이 작업을 수행하려면:

public static class StringExtensions
{
    public static String trim(this String s)
    {
        return s.Trim();
    }
}

그것을 사용하려면:

String s = "  Test  ";
s = s.trim();

이는 새로운 메서드처럼 보이지만 다음 코드와 정확히 동일한 방식으로 컴파일됩니다.

String s = "  Test  ";
s = StringExtensions.trim(s);

정확히 무엇을 성취하려고 하시나요?아마도 당신이 원하는 것을 하는 더 좋은 방법이 있을까요?

다른 팁

C#의 확장 메서드에 대해 이야기하는 것 같습니다.첫 번째 매개변수 앞에 "this" 키워드를 삽입하여 기존 클래스에 기능을 추가합니다.메서드는 정적 클래스의 정적 메서드여야 합니다..NET의 문자열에는 이미 "Trim" 메서드가 있으므로 다른 예를 사용하겠습니다.

public static class MyStringEtensions
{
    public static bool ContainsMabster(this string s)
    {
        return s.Contains("Mabster");
    }
}

이제 모든 문자열에는 다음과 같이 사용할 수 있는 매우 유용한 ContainsMabster 메서드가 있습니다.

if ("Why hello there, Mabster!".ContainsMabster()) { /* ... */ }

인터페이스(예: IList)에 확장 메서드를 추가할 수도 있습니다. 즉, 해당 인터페이스를 구현하는 모든 클래스도 새 메서드를 선택하게 됩니다.

확장 메서드에서 선언하는 추가 매개변수(첫 번째 "this" 매개변수 뒤)는 일반 매개변수로 처리됩니다.

.NET 3.5가 필요한 확장 메서드를 만들어야 합니다.메서드는 정적 클래스에서 정적이어야 합니다.메서드의 첫 번째 매개 변수에는 서명에서 "this"라는 접두사가 붙어야 합니다.

public static string MyMethod(this string input)
{
    // do things
}

그런 다음 다음과 같이 호출할 수 있습니다.

"asdfas".MyMethod();

3.5 컴파일러를 사용하면 확장 방법을 사용할 수 있습니다.

public static void Trim(this string s)
{
  // implementation
}

다음 해킹을 포함하여 CLR 2.0 대상 프로젝트(3.5 컴파일러)에서 이를 사용할 수 있습니다.

namespace System.Runtime.CompilerServices
{
  [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]
  public sealed class ExtensionAttribute : Attribute
  {
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top