3

varキーワードの導入以来、なぜ完全修飾名を使用するのかを使用したいのですか?

var変数宣言の型付けを効果的に減らします。したがって、コードを肥大化させることなく、完全な宣言を維持することが可能になります。namespaceこれは私に不思議に思います、なぜあなたは使用法を宣言したいのですか?

// A lot of typing, but unambiguous.
System.Drawing.Point a = new System.Drawing.Point();

// using System.Drawing, Point possibly ambiguous.
Point b = new Point();

// using System.Drawing, Point possibly ambiguous.
var c = new Point();

// Less typing, still unambiguous.
var d = new System.Drawing.Point();

ここでのベストプラクティスは何ですか?

4

5 に答える 5

13

名前空間は、いくつかの理由でのみ実際に役立ちます。

  1. 同じ名前のクラスを区別するのに役立ちます
  2. プロジェクトを意味のある部分に「構造化」するのに役立ちます

Odedが述べたように、これらの理由だけでも非常に重要になる可能性があります。まれですが、あいまいさは不可能ではなく、この場合、名前空間を使用する必要があります。

名前空間の詳細については、こちらをご覧ください。

于 2012-11-26T16:49:40.757 に答える
9

これは、名前空間についてではなく、コード内での静的型付けの使用についてのようです。使用しないことについて私が聞いた主な議論はvar、宣言を一瞥しても変数の型がすぐにわからない場合にまで及びます。次のコードを検討してください。

var readyTasks = _config.GetTasks().Where(x => x.Ready);

一体どうやってあなたは何を知るつもりreadyTasksですか? IEnumerable何が返されるかを考えると、これは当然のことWhere()ですが、それを超えると、このタイプからタイプを取得する唯一の方法は、マウスオーバーしてvarVisualStudioにフェレットさせることです。これは、LINQステートメントが長くなり、列挙型がループなどの論理構造に押し込まれforeach、リストがどんどん増えていくにつれて、さらに複雑になります。

(私が1人である)の支持者は、これが長期的にあなたのために生み出すvar非常に少ない面倒を刈り取るための小さなことであると反論するでしょう。var静的型宣言は、これまでプログラマーの快適さを考慮したものではありませんでした。それらは何よりもまずコンパイラ用です。したがって、このアーティファクトに慣れているという理由だけで、このアーティファクトを保持することは意味がないようです。

于 2012-11-26T16:59:50.853 に答える
3

あなたの質問は、実際にはなぜ完全修飾名を使用するのかということだと思います。なぜ名前空間を使用するのではないのですか?。

Object Oriented名前空間は、どの言語でも非常に重要です。同じ名前のクラスが2つある場合(これはすでに.NET Framework内で頻繁に発生します)、それらをどのように区別する必要がありますか?これが名前空間のポイントです。同じ名前空間内に同じ名前のクラスが2つある場合、コードはコンパイルされません。(もちろん、それらが部分的なクラスである場合を除きます。これはまったく別の話です)。

私がよく遭遇するこの例では、Listです。NHibernateここでは、独自のプロジェクトをいくつか使用していListます。をインスタンス化する場合List、次のことはできません。

var list = new List<string>();

NHibernate.Mapping.List..コンパイラは私がaまたは。を必要とするかどうかわからないためですSystem.Collections.Generic.List

varキーワードはに非常に役立ちますが、反対側に適切なステートメントまたは名前type inferenceがない場合は役に立ちません。usingFully Qualified

于 2012-11-26T16:59:07.157 に答える
1

名前空間が使用され
ます1.スコープを定義します
2.異なる名前空間/プロジェクト/アセンブリで同じクラス名を区別します。

varの使用法は、とにかく名前空間にリンクされていません。名前空間エイリアスによって処理される入力が少なくなります。

名前空間の使用

于 2012-11-26T16:56:59.390 に答える
1

使い捨てのテストアプリ(Stack Overflowの回答の確認など)では、名前空間を使用しません。他のことについては、私はします。これは単なる組織的なことです。コードを再利用する場合は、同じコンテキストで再利用している他のコードからコードを分離すると便利です。つまり、LibraryXとLibraryYを使用してアプリを作成している場合は、アプリ内でそれらを区別できると便利です。たとえば、両方が同じクラス名を使用している可能性があります。これにより、名前空間を使用しない場合、コードが見苦しくなります。

他のことは別として、Visual Studioでコーディングしている場合は、名前空間を含めないほうが実際には作業が多くなります。プロジェクトを変更して、空のデフォルトの名前空間を指定する必要があります。

命名に関する情報については、名前空間の命名規則を参照してください。

于 2012-11-26T17:05:11.207 に答える