.ToUpper()はどのように機能しますか?下のaがUTFコードXYZを持ち、上のaがUTFコードXYZ1を持っているというある種のマッピングはありますか?
4 に答える
はい、Unicodeメタデータを利用しています。すべての文字(ユニコードコードポイント)には、大文字と小文字(およびタイトルの大文字小文字)への大文字と小文字のマッピングがあります。.NETはこの情報を使用して、文字列を大文字または小文字に変換します。Unicode文字データベースにもまったく同じ情報があります。
String.ToUpperCurrentCulture
はinコアを使用するだけです。
のフォーム分解バージョンString.ToUpper()
、mscorelib.dll
あなたはこれを見ることができます:
public string ToUpper(CultureInfo culture)
{
if (culture == null)
{
throw new ArgumentNullException("culture");
}
return culture.TextInfo.ToUpper(this);
}
ですから、それはあなたの現在の文化に依存します。オルタナティブカルチャーを指定できる場所には、常に適切な過負荷があります。
編集
内部的には、ネイティブ実装nativeChangeCaseString
で最後に関数を呼び出します。それは内部でどのように実装されているのか、私にはわかりません。それは、それを開発した人が答えることができるものだからです。
@Timが提案したように、次のリンクを追加します
TextInfo.ToUpperは、件名に関する詳細情報を提供します。
これは、StackOverflowで以前に(ラウンドアバウトで)質問されました。確かに、それはC#や.NETに関するものではありませんが、この質問のUnicode部分に答えます。
ToUpper()実装の設計面に興味がある場合は、次のセクションを参照できます。
- Gang of FourデザインパターンカタログのFlyWeightデザインパターンは、キャラクター関連の機能を処理するために使用されます
- このデザインパターンに従って、コレクション内の各ユニットは、動作が定義されたオブジェクトとして設計され、最終的なオブジェクトは、より小さなユニットのコレクションです。
- 文字列の場合-指定された文字列は実際には文字の配列として処理されます。各文字は定義された動作を持つオブジェクトです。
- ToUpper()を呼び出すときにこのデザインパターンを使用すると、文字列の文字を繰り返し処理し、呼び出しを各文字に内部的に委任します。文字列でToUpperを呼び出すときに、Stringクラスは文字コード表とエンコーディングの詳細を含むロケールの参照も渡します。
実際の実装に興味がある場合は、Java言語のjava.lang.Stringクラス部分のオープンソース実装を参照できます。これは、C#文字列ユーティリティクラスと同等です。
以下は、java.lang.Stringクラスのソースコードを見つけることができるリンクです。2つのオーバーロードされたメソッドがあります:toUpper()とtoUpper(Locale)。内部的にtoUpper()はデフォルトのロケールでtoUpper(Locale)を呼び出すため、2番目のメソッドが重要になります。
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/String.java
この情報がお役に立てば幸いです。