.NetのDecimal.One、Decimal.Zero、Decimal.MinusOneは何のためにあるのですか?
質問
単純な質問ですが、なぜDecimal型はこれらの定数を定義しているのでしょうか?なぜわざわざ?
私はこれが言語によって定義されている理由を探しているのであって、可能な使い方やコンパイラの効果ではありません。そもそも、なぜこれをそこに置くのでしょうか。コンパイラは Decimal.Zero と同じように簡単に 0m をインライン化できるので、コンパイラのショートカットとしてこれを購入することはできません。
どのように解決するのですか?
小さな明確化。 これらは実際には静的な読み取り専用の値であり、定数ではありません。 これは .Net では明確な違いがあります。なぜなら定数値は インライン されるため、コンパイルされたアセンブリでの使用状況を追跡することができないからです。 しかし、静的な読み取り専用の値はコピーされず、代わりに参照されます。 これは、それらの使用を分析できることを意味するので、質問にとって有利です。
reflector を使用して BCL を調べると、MinusOne と Zero は VB ランタイムでのみ使用されることに気づきます。 これは主に、Decimal 値と Boolean 値の間の変換を提供するために存在します。 なぜMinusOneが使われるかは、偶然にもちょうど今日、別のスレッドで話題になりました( リンク )
奇妙なことに、Decimal.Oneの値を見てみると、どこにも使われていないことに気がつきます。
なぜそれらが明示的に定義されているのかについては ... 明確な理由があるとは思えません。 そこには が現れる。 は、具体的な性能はなく、その存在に帰することができるのは、ちょっとした便宜的な措置に過ぎない。 私の 推測 は、BCL の開発中に便宜上誰かが追加し、そのまま削除されなかったのだと思います。
EDIT
に掘られた
const
の問題をもう少し掘り下げてみました。 C# の定義では
Decimal.One
は
const
修飾子を使いますが、これは
static readonly
としてILレベルで出力されます。 C#コンパイラはいくつかのトリックを使って、この値を事実上
const
(とほとんど区別がつきません(たとえば、インライン・リテラル)。 これは、このトリックを認識する言語では表示されます (VB.Net はこれを認識しますが、F# は認識しません)。
関連
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】ランダムなブーリアンを生成する最速の方法
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] usingディレクティブはネームスペースの内側と外側のどちらを使うべきですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] IDisposable インターフェースの正しい使用法
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。