이 "확장 연산자"(일반적으로 확장 방법으로 수행)를 사용하려는 위치를 제어하는 경우 다음과 같이 할 수 있습니다.
class Program {
static void Main(string[] args) {
StringBuilder sb = new StringBuilder();
ReceiveImportantMessage(sb);
Console.WriteLine(sb.ToString());
}
// the important thing is to use StringBuilderWrapper!
private static void ReceiveImportantMessage(StringBuilderWrapper sb) {
sb += "Hello World!";
}
}
public class StringBuilderWrapper {
public StringBuilderWrapper(StringBuilder sb) { StringBuilder = sb; }
public StringBuilder StringBuilder { get; private set; }
public static implicit operator StringBuilderWrapper(StringBuilder sb) {
return new StringBuilderWrapper(sb);
}
public static StringBuilderWrapper operator +(StringBuilderWrapper sbw, string s) {
sbw.StringBuilder.Append(s);
return sbw;
}
}
StringBuilderWrapper
클래스가 선언 암시 적 변환 연산자 (A)로부터 StringBuilder
그리고 원하는 선언 +
오퍼레이터. 이런 식으로 a StringBuilder
가로 전달 될 수 있으며 ,이 연산자는 ReceiveImportantMessage
자동으로로 변환되어 연산자를 사용할 수 있습니다.StringBuilderWrapper
+
호출자에게보다 투명이 사실, 당신은 선언 할 수 있도록하기 위해 ReceiveImportantMessage
복용하는으로 StringBuilder
같은 단지 코드를 사용 :
private static void ReceiveImportantMessage(StringBuilder sb) {
StringBuilderWrapper sbw = sb;
sbw += "Hello World!";
}
또는 이미를 사용하는 곳에서 인라인으로 사용하려면 StringBuilder
다음과 같이하면됩니다.
StringBuilder sb = new StringBuilder();
StringBuilderWrapper sbw = sb;
sbw += "Hello World!";
Console.WriteLine(sb.ToString());
더 이해 하기 쉽도록 비슷한 접근법을 사용하는 것에 대한 게시물을 작성 했습니다IComparable
.