C#スタディノート-文字列クラスの概要

文字列文字列クラスは封印され、封印された不変の文字列プールによって変更されます。

1.不変性

   文字列が宣言されて割り当てられると、その変数が指すアドレスのアドレスはヒープ内で不変になり、プログラムが終了したときにのみ解放できます。もちろん、文字列はStringBuilderを介して操作できます。

//以下操作相当于在堆中开辟五块内存地址
//"a""b""c"在堆中的地址如何没有相应的栈内存指向,会一直保存在堆中,知道程序关闭释放
string a="a";
string b="b";
string c="c";
a=a+b;//结果:ab
a=a+c;//结果abc

2.キャラクタープール 

//s1和s2可以说是两个相同的对象,它们在栈中的地址不一样,但是都指向的是"abc"堆中的地址
//s1和s3不是同一个对象,s3的赋值语句a+b+c相当于在堆中重新开辟了一块内存
string s1="abc";
string s2="abc";
string a="a";
string b="b";
string c="c";
string s3=a+b+c;

   文字列変数を宣言して値を割り当てるプロセスでは、割り当ての内容が最初に文字プールで検索されます。存在する場合は、変数品質のメモリアドレスが直接使用されます。存在しない場合は、割り当てられたコンテンツを保存するために、新しいメモリアドレスが開かれます 

ハッシュテーブルにない動的文字列の場合、パフォーマンスを向上させる目的で、このインターンをハッシュテーブルに追加できます。
(1)StringIntern(xx)、Internメソッドは、一時ストレージプールを使用して、strの値に等しい文字列を検索します。そのような文字列が存在する場合、スクラッチプール内のその参照が返されます。存在しない場合は、スクラッチプールにstrへの参照を追加するように依頼してから、参照を返します。
(2)Sstring Isintemed(xx)、このメソッドは一時ストレージプール内のstrをチェックします。strがステージングプールに配置されている場合は、このインスタンスへの参照を返します。それ以外の場合は、nullNothingnullptrnu参照を返します。

3.文字列クラスの前にsealedキーワードを変更する必要があるのはなぜですか?

(1)サブクラスが文字列クラスを継承したい場合、文字列クラスを変更したり、文字列の特性を変更したりすることがあります(文字列の不変性を変更します)。

(2)CLRは、文字列に対してさまざまな特殊操作メソッドを提供します。文字列クラスを継承するサブクラスが多数ある場合、CLRはより多くのタイプに対して特殊操作を提供する必要があり、パフォーマンスが低下します。

4.文字列のフォーマット

Console.WriteLine()およびstring.Format()では、文字列をフォーマットする必要がある場合があります

string.Format( "今日は{0}、私は{1}を獲得しました"、System.DateTime.Now、800)など

文字列の操作:string.Format( "今日は{0:D}、私は{1:C3}を獲得しました"、System.DateTime.Now、800)

{0、20]は右揃えを意味し、幅は20スペースです。

{0、-20}は、左揃え、幅20スペースを意味します

{可変シリアル番号、幅:文字形式}、特定の操作についてはMicrosoft msdn:複合形式を参照してください

 

おすすめ

転載: blog.csdn.net/qq_39157152/article/details/106972424
おすすめ