クラスと構造体

最近C#をいじっている。
ある操作をする常駐ソフトを作れないかと思ったのだが、実のところ本当はC++にしておきたかった。しかし、最終的に「サーバープロセス」を作成する場合、手元にあるVisualstudioではC#を使用しなければならないことが分かったので、そのためだ。
そもそも、CやC++はいじったことがあったが「Visual」な開発はしたことがないので、ステップとしてVisual C++にしたかったのだが。
なにはさておき、一応最新仕様のC#。お題目の「生産性の高さ」はチュートリアルで理解できたが、「コンポーネント部品の配置」を基本とするのはちょっと気持ちが悪い。(といっていては生産性は上がらないのか。)もともとVisualである時点でお仕着せのコントロールを大量に使う羽目になるので(さすがにこれは作りたいとも思わない)そんなことは考えるだけ無駄なのかもしれない。
それはともかく、何となくデータのカプセル化にはクラスを使うものだと思っていたのだが、C#では厳然として構造体が存在していることを初めて知った。クラスとメモリの利用形態が違うらしく、分けて利用するものらしい。しかも、メソッドとかインターフェイスとかが適応できるらしく、継承できない以外はクラスと大差ないようだ。*1
Cからの派生を見ていて、「クラスは構造体にメソッドを組み込んでユニット化したもの」と思っていたので、ちょっと意外だった。(C++でも構造体にメソッドを持たせられたらしい。知らなかった。)
ちなみに、「メンバ変数、フィールド、プロパティー」「メンバ関数、メソッド」など、用語が交錯していて辟易する。プロパティーC#でget/setメソッドを簡単に宣言するためのものとして明確な意味を持ったらしいのだが、今までメンバ変数と同じ意味で使われていたような気がしないでもない。

*1:値渡し、参照渡しを大差ないというのは豪快か。