web-dev-qa-db-ja.com

プリミティブデータ型はC#でどのように作成されますか?

どうすればSystem.floatSystem.intおよび他のプリミティブ型は機能しますか?プリミティブ構造体を作成する方法が理解できなかったため、独自の数値型を作成できるかどうか疑問に思いました。

51

ほとんどすべてがそうであるように、Common Language Infrastructure(CLI)をターゲットとするC#コンパイラについて話していると仮定すると、基本的にはCLIによって公開されるプリミティブ型を使用します。

考慮すべきサポートには、実質的に3つのレベルがあります。

  • ILで独自の表現と命令を備えた本物のプリミティブ
  • C#コンパイラが特別な知識を持っているが、CLIの一部ではない数値型-基本的に、System.Decimal。これはalso Common Type System(CTS)の一部です。つまり、C#でconst decimalを作成しても、たとえばVBでそれを使用できます。しかし、まだ直接的なものはありません[〜#〜] il [〜#〜]サポート。
  • BigIntegerなどのその他の数値タイプ-これらの独自の数値タイプを作成できます。

2番目の箇条書きの中点により、C#は10進リテラルと10進定数を持つことができますが、3番目の箇条書きではどちらも使用できません。たとえば、BigIntegerには言語サポートがないため、次のように書くことはできません。

// This isn't valid
BigInteger bigInteger = 123456789012345678901234567890;

代わりに、文字列表現を解析する必要があります。同様に、const BigIntegerを使用することはできません。

(理論的には、C#ではサポートされているがCTSではサポートされていない型を持つことは可能です。そのような型は知りません。)

67
Jon Skeet

intfloatなどのプリミティブ型はプロセッサによって直接サポートされており、.netプラットフォームと言語にも同様の組み込みサポートがあります。そのため、言語レベルで独自のプリミティブを作成する方法はありません。

7
JacquesB