web-dev-qa-db-ja.com

c#:「System.Object」と「object」の違い

C#では、objectだけでなくSystem.Objectをコードで使用するか、stringではなくSystem.Stringを使用するなどの違いはありますか?それともスタイルの問題ですか?

ある形式が他の形式よりも好ましい理由はありますか?

71
Paolo Tedesco

stringglobal::System.Stringのエイリアスです。それは単に構文上の砂糖です。 2つは正確にほとんどすべての場合に交換可能であり、コンパイルされたコードに違いはありません。

個人的には、変数名などのエイリアスを使用していますが、APIの名前にはCLRタイプ名を使用しています。次に例を示します。

public int ReadInt32() // Good, language-neutral

public int ReadInt() // Bad, assumes C# meaning of "int"

(戻り値の型は、実際には名前ではないことに注意してください。メタデータでは型としてエンコードされているため、混乱はありません。)

一方が使用できる場所ともう一方が使用できない場所を知っている(私が知っている)唯一の場所は、次のとおりです。

  • nameofはエイリアスの使用を禁止します
  • 列挙型の基本となる型を指定する場合、onlyエイリアスを使用できます
68
Jon Skeet

objectタイプは、System.Objectのエイリアスです。 objectタイプが使用され、キーワードとして表示されます。それはレガシーと関係があると思いますが、それは単なるワイルドな推測です。

すべての詳細については、この [〜#〜] msdn [〜#〜] ページをご覧ください。

小文字バージョンの使用を好みますが、特別な理由はありません。これらの「基本」タイプでは構文の強調表示が異なり、入力時にShiftキーを使用する必要がないためです...

7
Sorskoot

1つは他のエイリアスです。そのスタイルにダウン。

6
Johnno Nolan

stringglobal::System.Stringのエイリアスであり、objectglobal::System.Objectのエイリアスです

クラスにusing System;がある場合、String/stringObject/objectは機能的に同一であり、使用方法はスタイルの問題です。

(編集:削除 やや誤解を招く引用 、ジョン・スキートのコメントによる)

3
Colin Pickard

string(小文字の "s"付き)はC#言語の文字列型と型System.Stringは、.NETフレームワークでのstringの実装です。

実際には、文体的なもの以外に違いはありません。

編集:上記は明らかに十分に明確ではなかったため、両者に違いはなく、一度コンパイルすると同じ型になります。コンパイラーが見る意味の違いを説明していました(これは単なるwhileとforループの違いに似た、単なる構文上の砂糖です)。

1

objectintlong およびbooltraining wheelとして提供され、アイデアへの適応に問題がありました。データ型が言語の固定部分ではないこと。 C#は、以前の言語とは異なり、追加できるデータ型の数に制限はありません。 「システム」ライブラリは、System.Int32System.BooleanSystem.DoubleSystem.DateTimeなどですが、エンジニアは独自のものを追加することをお勧めします。 Microsoftは新しい言語の迅速な採用に関心があったため、言語がより「C」のように見えるエイリアスを提供しましたが、これらのエイリアスは完全に使い捨ての機能です(C#は、すべての組み込みエイリアスを削除しました。

StyleCopはレガシーCスタイルのエイリアスの使用を強制しますが、それ以外の場合は論理的なルールのセットに欠点があります。現時点では、この規則(SA1121)について、独断に基づくものではない正当な理由は1つもありません。 SA1121が論理的であると考える場合、なぜdatetimeの組み込みタイプがないのですか?

0
Quarkly

違いはありません。 Primitive Data Types と呼ばれる多くのタイプがあり、コンパイラはあなたが言及したスタイルで脅かされています。

大文字の命名スタイルはISO命名規則です。より一般的で一般的です。ソース内のすべてのオブジェクトに同じ命名規則を強制します。C#コンパイラのような例外はありません。

0
abatishchev

私の知る限り、これはショートカットであることを知っています。System.stringよりもstringを使用する方が簡単です。

ただし、文字列と文字列の違いに注意してください(c#は大文字と小文字を区別します)

0
Omar Abid