- ベストアンサー
C#のクラス型などの宣言についての理解と解釈方法
- C#でのクラス型の宣言には、変数の型宣言や関数の戻り値などにクラス名を使用します。
- 同様に、インターフェイス名やデリゲート名を使用した宣言もあります。
- これらの宣言は参照型の宣言であり、内部の挙動や実際の文とのリンクについてはあまり深く考える必要はありません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> public classA x; > public classA x(){}; 変数Xの型がclassA、メソッドXの戻り値の型がclassAであるということを示しています。 ここでclassAは(クラスか構造体かの違いはありますが)intなどと同じように型を示しているだけです。 > public IEnumerator<int> x(){}; > public delegateA x;など InterfaceやDelegateも上と同じように型です。 > ・参照型という宣言である(専用の修飾子がない) 確かにclassAやIEnumerator、delegateAのインスタンスは参照型になると思いますが専用の修飾子がないという部分がわかりませんでした。 > ・いわゆる定型文なので、これ以上の応用はなく深く理解する必要もない 基礎なのでわからないと書けないです。。。 ここからは#1の方に対するコメントです。 > IEnumerator とかはクラスに実装されているインターフェイスで、分かりやすく言うとアクセサメソッドです。 > 深く説明するにはCOM とかの本を読んでもらう必要があります。 Interfaceがアクセサメソッドというのは言いすぎな気がします。 そもそもInterfaceはmethodではないし、C#のプロパティと混同されてしまいます。 そしてオブジェクト指向ではInterfaceは多用されます。深い説明にCOMが特別必要になる理由が分からないです。 > これが進化したのがLINQ なんですが、そこではもう戻り値はvar 型でして LINQの戻り値をvarで受けることは多いですが、戻り値には型があります。 var型という型が存在するわけではないので語弊を招いてしまいます。 > delegate あたりは具体的な動作の方が理解を求められるかと思います。 > マルチスレッド的な(マーシャルだとかアパートメントだとか)その辺の理解があると解釈がすすむかなと。 delegateはマルチスレッドではないプログラムでも使われるので、理解のためにマルチスレッドを持ち出すのは逆に混乱の元です。
その他の回答 (2)
ANo1 です。ANo2 さんへの補足を読む限り、質問者様は相当トンチンカンな気がします。 #ごめんなさい。以下、悪気はありません。 classA とかclassX とかで悩むレベルだったら、オブジェクト指向の本を一冊買って読んだほうが早いと思います。 プログラマは知ってる事しか知らないといいます。ですからまずは悩む前に調べるのが先です。ネットだけで勉強すると、こういう肝心な部分が知ってて当たり前とされるために省略され、結果的に余計に悩む事になります。 > もちろん、charA xなんて構文はないでしょうけれども 地球が丸いはずが無いと言ってる位ヤバイです。
お礼
おっしゃる通りですと、確かにヤバイ!
いろんな言語がある時代ですから、C#を知らないといいつつここまで専門的な質問ができるんだなぁと驚いています。達人ですか? まずC# ではint 型とかいっても実際にはInt32 とかクラス(オブジェクト)での扱いになります。Java のように分かれて無いはずです。 IEnumerator とかはクラスに実装されているインターフェイスで、分かりやすく言うとアクセサメソッドです。深く説明するにはCOM とかの本を読んでもらう必要があります。戻り値にインターフェイスを指定しているのは、具体的なインスタンス(戻り値の入ったコレクションそのもの)の所在については考慮する必要が無いという事なんでしょう。 これが進化したのがLINQ なんですが、そこではもう戻り値はvar 型でして、インターフェイスですら気にしなくていいなんて事になっちゃってるようです。 delegate あたりは具体的な動作の方が理解を求められるかと思います。マルチスレッド的な(マーシャルだとかアパートメントだとか)、その辺の理解があると解釈がすすむかなと。 この辺はEssential COM とかに詳しく書かれてますが、絶版ぽいですし、読んでもサッパリという可能性も多々あります。 定型だから深く追求しない。LINQ とか、もうC#のCはどこにいったと最初は思いましたね。
お礼
いやん、達人は気のせいです>< りあさんまじ美人です^^ 戻り値への指定で、情報へどこまでアクセスするかが決まる 指定先が・・ インターフェース、その枠組み=より抽象的なパーツが渡される インスタンス、実体=戻り値などを持った実体が渡される といったニュアンスであってるでしょうか、 ご回答ありがとうございまス!
お礼
ありがとうございました!
補足
えー!やはり型宣言なんですか? この2つの宣言、こう解釈してます。 char charA; →「charA」はchar型だよ~ class classA; →「classA」はクラスです、参照型です。 ここで質問の型宣言の文ですが、 classA x; →「x」はclassA型 このclassA型とは一体何を指すの?参照型?クラス? なんだか char x; を charA x; と書いているような違和感があるのです もちろん、charA xなんて構文はないでしょうけれども ※ char x =char型 charA x =charA型 ???? x =????型 classA x =classA型 なんかこんなイメージで、classAの素性が見えない ちなみに修飾子とはcharの事を言いたかったのです。