2009-06-21 4 views
0

私はまだC#を学んでいるし、大きなプログラムを実行していないが、コンソールアプリケーションだけです。私はPro C#3.5を読んでいます。私は次のような質問をしています。C#プログラムの構造

  1. 私はC#がenumを持っていることを知っていますが、どのように大きなプログラムでenumが作成されていますか?それらは1つのC#ファイルで作成されていますか?またはそれらが異なる.csファイルに広がっていますか?

  2. また、C#expressでIntellisenseを使用すると、データ型stringとString(大きなS)があることがわかりますが、それらは同じですか?私はオブジェクトのブラウザをチェックし、彼らは同じクラスを指していると思う。

  3. これはかなり簡単な質問です。以前はjavaでプログラミングしていましたが、継承階層を持たないプリミティブなデータ型があります。しかし、私がC#の探求を続けていくうちに、C#のints、double、floatには System.ValueTypeから継承した継承階層があることがわかりました。これはC#がjavaより多くのオブジェクト指向(オブジェクト指向)であることを意味しますか? この本の中でSystem.ValueTypeは具体的なクラスではないので、私はこれについてはわかりません。

申し訳ありませんが、私の質問はあいまいかもしれませんが、私は勉強しようとしている初心者です。あなたは私に忍耐力があることを願っています。

この本を提案してくれてありがとう。このサイトでは、トピックを教える方法が本当に気に入りました。

答えて

0
  1. あなたが作成/(私は別のファイルをお勧めしませんが)既存の.csファイルまたは自身での.csファイルに列挙型を宣言することができます。クラス、構造体などの作成/宣言と同じです。

  2. 文字列と文字列は同じ型です。 stringは、CLR String型にマップされるC#組み込み型です。

  3. 「もっと詳しく」とは何を意味するのかわかりません。値型はまだスタックを使用しますが、ヒープは使用しません。

8

1)列挙型は、あなたが望む任意の場所に作成することができますが、彼らが論理的に名前空間に意味をなす場所にそれらを置くことを常に親指の良いルールです。私は通常、Constants.csという名前空間フォルダのルート、またはその名前空間の列挙型ファイルのルートにファイルを持っています。

2.)stringSystem.Stringにマップされているので同等です。

3)CLRのすべてはSystem.Objectに由来します。基本的にCLR、参照型、および値型には2つのタイプのオブジェクトがあります。すべてのプリミティブ型、および列挙型は、それらがSystem.ValueType

0

から派生している理由は、私はあなたの質問に答えるで刺しを取ることができますされ、値タイプです:

  1. 私は場所の近くに私の列挙型を維持しよう彼らは必要です。つまり、同じファイル内にあるか(1つか2つの場所でのみ使用される場合)、同じフォルダ内にあるかのどちらかです。たとえば、私は最近NavalBattleゲームを作って、タイルタイプ(深水、浅い水、土地)だけでなく、列挙型(攻撃、移動、降伏)の列挙型を持っていました。 TileType.Landに行くのがはるかにクリーンであることがわかりました。

  2. これらは同じです。

  3. あなたは読むことをお勧めします:http://msdn.microsoft.com/en-us/library/ms228360(VS.80).aspx

0

1)列挙型はどこでもあなたがそれのように感じる行うことができます。それらは同じファイル内にあっても、別のファイルであっても同じクラスの一部であってもかまいません。オブジェクト内に置くことさえできるかもしれませんが、それについて私を引用しません。

2)C#でプリミティブが実際にオブジェクトです)彼らは同じであり、私は3

3にこの回答の絆を信じています。これにより、Javaよりもオブジェクト指向になりますか?それはあなたのオブジェクト指向の定義に依存します。言語がどのようなデータ型を持っていて、どの言語がどのようにOOであるかを判断するなら、C#はJavaよりもオブジェクト指向です。あなたがコードを書く方法とオブジェクトの仕組みに結びついていると感じたら、それはその議論のためのものですが、その点ではほぼ同じだと思います。

0
  1. enumを定義する場所は、使用しているコーディングスタイルによって決まります。私は定義を一次処理のために使用する場所に近づけたいと考えています。
  2. 文字列と文字列がのInt32がintであるのと同じように同じものです、UInt32型はUINTあり、そしてオブジェクトがC#で
  3. すべてが値の型がObjectから派生ValueTypeに由来し、Objectから派生するオブジェクトです。 ValueTypeから派生したものは、それが保証されていないものの、スタックに保持されるという点で特別に扱われます。詳しくはエリックリペットはhttp://blogs.msdn.com/ericlippert/archive/2009/04/27/the-stack-is-an-implementation-detail.aspx
0
  1. でC#でスタックについて良い議論を行ったために一般的に、それはあなた次第ですが、あなたは試してみて、列挙型(Sを使用するクラスへの配置は、無料にする必要があります)。そのため、同じ名前空間(理想的には同じプロジェクトディレクトリを意味する)に列挙型を使用するクラスとしてenumを配置するのが一般的です。代わりに、 "ProjectNamespace.Constants"の行に沿って何かにあなたのenumを置くことも珍しくありません。列挙型をパラメータとするクラスを使用しているときは、想像してみてください。それにはほとんど時間がかからないはずです。

  2. これらは同じです。また、 "int"のような他の同様のショートカットは、System.Int32のような完全修飾名にマップすることに注意してください。これらも同様に実現することが重要です。

  3. すべてがSystem.Objectから派生し、そこから値型と参照型に分岐します。この問題を回避するには、値型を理解するための構造体と参照型のクラスを作成してください。