Program Tip

String과 같은 C # 기본 제공 유형을 확장하는 방법은 무엇입니까?

programtip 2020. 10. 4. 13:10
반응형

String과 같은 C # 기본 제공 유형을 확장하는 방법은 무엇입니까?


인사말 모든 사람이 ... 내가 필요 . 그러나 문자열의 끝이나 시작 부분뿐만 아니라 문자열 자체 내에서 반복되는 모든 공백을 제거하고 싶습니다. 다음과 같은 방법으로 할 수 있습니다.TrimString

public static string ConvertWhitespacesToSingleSpaces(string value)
{
    value = Regex.Replace(value, @"\s+", " ");
}

내가 여기서 얻은 . 하지만이 코드 조각이 String.Trim()자체적 으로 호출되기를 원 하므로 Trim메서드 를 확장하거나 오버로드하거나 재정의해야한다고 생각합니다. 그렇게 할 수 있는 방법이 있습니까?

미리 감사드립니다.


string.Trim ()을 확장 할 수 없기 때문에. 여기설명 된대로 공백을 자르고 줄이는 Extension 메서드를 만들 수 있습니다.

namespace CustomExtensions
{
    //Extension methods must be defined in a static class
    public static class StringExtension
    {
        // This is the extension method.
        // The first parameter takes the "this" modifier
        // and specifies the type for which the method is defined.
        public static string TrimAndReduce(this string str)
        {
            return ConvertWhitespacesToSingleSpaces(str).Trim();
        }

        public static string ConvertWhitespacesToSingleSpaces(this string value)
        {
            return Regex.Replace(value, @"\s+", " ");
        }
    }
}

그렇게 사용할 수 있습니다

using CustomExtensions;

string text = "  I'm    wearing the   cheese.  It isn't wearing me!   ";
text = text.TrimAndReduce();

당신에게 준다

text = "I'm wearing the cheese. It isn't wearing me!";

가능할까요? 예,하지만 확장 방법 만 사용

클래스 System.String는 봉인되어 있으므로 재정의 또는 상속을 사용할 수 없습니다.

public static class MyStringExtensions
{
  public static string ConvertWhitespacesToSingleSpaces(this string value)
  {
    return Regex.Replace(value, @"\s+", " ");
  }
}

// usage: 
string s = "test   !";
s = s.ConvertWhitespacesToSingleSpaces();

There's a yes and a no to your question.

Yes, you can extend existing types by using extension methods. Extension methods, naturally, can only access the public interface of the type.

public static string ConvertWhitespacesToSingleSpaces(this string value) {...}

// some time later...
"hello world".ConvertWhitespacesToSingleSpaces()

No, you cannot call this method Trim(). Extension methods do not participate in overloading. I think a compiler should even give you a error message detailing this.

Extension methods are only visible if the namespace containing the type that defines the method is using'ed.


Extension methods!

public static class MyExtensions
{
    public static string ConvertWhitespacesToSingleSpaces(this string value)
    {
        return Regex.Replace(value, @"\s+", " ");
    }
}

Besides using extension methods -- likely a good candidate here -- it is also possible to "wrap" an object (e.g. "object composition"). As long as the wrapped form contains no more information than the thing being wrapped then the wrapped item may be cleanly passed through implicit or explicit conversions with no loss of information: just a change of type/interface.

Happy coding.

참고URL : https://stackoverflow.com/questions/4910108/how-to-extend-c-sharp-built-in-types-like-string

반응형