यदि आप उन स्थानों को नियंत्रित करते हैं, जहाँ आप इस "एक्सटेंशन ऑपरेटर" का उपयोग करना चाहते हैं (जो आप सामान्य रूप से वैसे भी एक्सटेंशन विधियों के साथ करते हैं), तो आप इस तरह से कर सकते हैं:
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
वर्ग एक वाणी अंतर्निहित रूपांतरण ऑपरेटर एक से StringBuilder
और वांछित वाणी +
ऑपरेटर। इस तरह, एक 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
।