1

私は最近質問をしました:::はどういう意味ですか?

そして今日、もちろん私はその正確な問題に遭遇しました。頭から離れると、System.Timers名前空間とSystem.Threading名前空間の両方を使用していたと思います。私が覚えている限り、どちらにもTimerというクラスがあります。さて、私が知りたいのは無関係です。次の違いは何ですか。

Using myalias = System.Timers;
myalias::Timer myTimer = new myalias::Timer();

Using System.Timers;
System.Timers.Timer myTimer = new System.Timers.Timer();

これが十分に明確であることを願っています。名前空間を入力するだけで::を使用する理由を知りたいのですが、ネストされた名前空間がたくさんある場合に備えて、入力を保存するだけですか?

4

5 に答える 5

2

::多くのシナリオがある場合に役立ちます。入力の保存は1つだけであり、実際、ほとんどの場合、完全修飾名で十分です。

主な用途はコード生成であり、global :: System.whateverを参照すると、特に誰かがタイプ/ネストされたタイプ/プロパティを呼び出すことを不適切に選択Systemした場合(この場合はSystem.Whatever no longは期待したものを指しますが、global::System.Whatever何をしますか。

より微妙なもの:2つのライブラリa.dllとb.dllを考えてみましょう-何らかの理由で両方にFoo.Bar.SomeTypeが含まれています-ここでは、「externエイリアス」を使用して、トップを変えることで両方のタイプについて別々に話すことができます-レベルのエイリアス(グローバル::ではなく)に名前を付けます。

于 2012-08-12T21:16:41.210 に答える
1

それは違いではなく、衝突しているタイプを使用する方法です。

あるタイプを使用する場合

namepsace My.System.Pro
{
   public class Project{}
}

を持っている他のプロジェクトを使い始める

namepsace His.System.Pro
{
   public class Project{}
}

2つのタイプProjectが衝突しているため、完全修飾名を記述する代わりに、yuorまたは彼の名前空間にエイリアスを割り当てます。これは、コーディングスタイルのための快適さのためだけです。

于 2012-08-12T21:11:51.590 に答える
0

どちらも同じ基礎となるコードを生成します。問題はコードの可読性です。

于 2012-08-12T21:14:04.763 に答える
0

それらは同じコードを生成しますが、エイリアスは、それが存在することを知っていて、それらすべての長い修飾子を書く手間をかけたくない怠惰なパワー開発者のためのものです。

編集:エイリアスによってコードの追跡が困難になるため、私は個人的に長い修飾子を好みます。ヨーヨー問題のソースコード版です

于 2012-08-12T21:17:21.543 に答える
0

エイリアスは、完全修飾バージョンを短縮するための単なる方法です。どちらが良いかは読みやすさの問題です。通常、完全修飾型は必要以上のスペースを占めるため、型を指定するコンパクトな方法が通常は好まれます。

于 2012-08-12T21:17:34.063 に答える