2016-10-06 2 views
1

bool,intおよび(いくつか挙げると)は、すべてSystemタイプのエイリアスである。
これらは、System指令が含まれていなくてもすべて使用できます。
Systemディレクティブがないと、エイリアスの種類を使用できません。Systemディレクティブがない場合、型のエイリアスはどのように解決されますか?

public class Test 
{ 
    public static void Main() 
    { 
     bool b;  //valid 
     Boolean b2; //compiler error 

     int i;  //valid 
     Int32 i2; //compiler error 

     string s; //valid 
     String s2; //compiler error 
    } 
} 

私はこれがなぜ機能するかについてはほとんど質問がありません。

  • これらの一般的に使用される型は例外ですか?

  • ディレクティブは、エイリアシングを確認するために調べられていますか( )、他のタイプは検討されていませんか?

  • はそれがSystem指示なしに、常に 使用boolintstringなどに安全ですか?

+1

コンパイラがエイリアスを完全修飾名でスワップしたと仮定します。つまり、 'bool b'はコンパイル時に' System.Boolean b'です。 – TyCobb

+0

これらは単なるエイリアスではなく、C#言語の* keywords *です。いつでも、どこからでも、今から100年後にも、誰もが私たちの石器時代のコンピュータについてうんざりしています。 –

答えて

0

これらの一般的に使用されるタイプの例外を作るコンパイラですか?

はい。

エイリアスを特定するためにシステムディレクティブが参照されていますが、他のタイプは検討されていませんか?

はい。そうですね。 Systemディレクティブはありません。 usingディレクティブがあり、タイプを定義するSystem名前空間をインポートできます。

bool、int、stringなどをSystemディレクティブなしで使用することはいつでも安全ですか?

はい。

C#のような現代の言語の多くは、C++の影響を強く受けています.C++は、コンパイラとランタイムの完全な分離という革新的な立場を取っていました。 Cのコンパイラは、標準ライブラリについてはまったく仮定していませんでした。理論的には、標準ライブラリを含まないCプログラムを記述することは可能です。

しかし、C#のような言語は、コンパイラとランタイムの間にある程度の結託があることに大きなメリットがあることを認めています。多くのC#キーワードは、ランタイムからのサポートに依存します。その良い例は、yield returnというキーワードです。他の例としては、あなたの質問が尋ねているタイプがあります。

1

あなたはhttps://msdn.microsoft.com/en-us/library/ya5y69ds.aspxを参照する場合は、組み込みのことをboolean型参照は、エイリアスが完全修飾されているSystem.BooleanないBooleanの別名です。

ですから、int x;を書くときには、System.Int32 x;だけでなくInt32にエイリアスを取得または他の独自の名前空間でInt32と呼ばれるタイプを定義した場合、彼らは衝突する可能性があります。

これらの組み込み型を使用すると、プラットフォームに応じてsizeofが呼び出されたときに、C/C++で組み込み型の基底型が異なるために異なる値が返されることがあるため、常に同じ問題はありません。 。

関連する問題