Ο τύπος δεδομένων string, είναι immutable στο .NET Framework. Πρακτικά αυτό σημαίνει, ότι όταν δημιουργήσουμε ένα string, τότε το περιεχόμενό του δεν μπορεί να αλλάξει. Δηλαδή, στο παρακάτω τμήμα κώδικα
string s = “Hello”;
s += ” World”;
το s αρχικά δείχνει σε μία θέση μνήμης όπου είναι αποθηκευμένο το “Hello”. Με την προσθήκη (concatenation) του ” World”, το s πλέον δείχνει σε άλλη θέση μνήμης, στην οποία είναι αποθηκευμένο το “Hello World”. Συνεπώς, είναι προφανές ότι η επεξεργασία strings έχει κάποιο performance hit, ειδικά όταν έχουμε πολλά strings. Η λύση του .NET Base Class Library για αυτό είναι το object System.Text.StringBuilder
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StringBuilder : ISerializable
Το StringBuilder είναι mutable αντικείμενο, δηλαδή το περιέχόμενό του μπορεί να αλλάξει. Η χωρητικότητα του δεν μπορεί να είναι μεγαλύτερη από System.Int32.MaxValue, και η default είναι 16.
Μερικά properties
- Capacity (read/write) : επιστρέφει/θέτει το μέγιστο αριθμό χαρακτήρων που μπορεί να χωρέσει το συγκεκριμένο instance
- MaxCapacity (read) : επιστρέφει το μέγιστο αριθμό χαρακτήρων που μπορεί να χωρέσει το συγκεκριμένο instance
- Length (read/write) : επιστρέφει/θέτει το μήκος του περιεχόμενου string
Μερικές συναρτήσεις
- Append (με 18 overloads) : προσθέτει Unicode χαρακτήρες (ή και άλλους τύπους δεδομένων) στο τέλος του περιεχόμενου string
- Insert (με 17 overloads) : τοποθετεί Unicode χαρακτήρες (ή και άλλους τύπους δεδομένων) σε συγκεκριμένο σημείο του περιεχόμενου string (περνιέται σαν παράμετρος)
- Remove : σβήνει x χαρακτήρες από το περιεχόμενο string στο σημείο y (x,y παράμετροι)
- Replace (με 3 overloads) : αντικαθιστά χαρακτήρες ή ενσωματωμένα strings
Για να πάρουμε το περιεχόμενο string του StringBuilder, αρκεί να καλέσουμε την συνάρτηση .ToString() που κληρονομεί από το System.Object.
Να τονιστεί ότι οι συναρτήσεις του StringBuilder επενεργούν στο ίδιο object, αντί να επιστρέφουν ένα καινούριο, όπως γίνεται στην περίπτωση του string.
Δηλαδή, για τύπο string γράφουμε
string s =“Hello Woorld”;
s = s.Replace(“oo”,“o”);
Ενώ για StringBuilder γράφουμε
StringBuilder s = new StringBuilder(“Hello Woorld”);
s.Replace(“oo”,“o”);