おまじないを卒業しよう。
ということで、ごった煮な内容でお届けしたいと思います。
詳しい説明はリンク先頼みな内容になる予定。。。
Cを混ぜたのは早くも失敗した感がしている。
気が向いたら追記していきます。
なぜ「おまじない」のままではダメなのか
プログラミングの業界で「おまじない」というと、「よく分からないけど」とりあえず書いてみたといったニュアンスだと思います。
1文字間違えただけで致命的なバグになったりする世界で、「よく分からないけどみんな書いてるから」で書くのは恐ろしいことではないでしょうか?
基本を理解していないと、どこかでハマることになります。という事で、分からないままにするのはよろしくないと思うわけです。
Cにおける#include
実際はなにをやっているのか?
⇒ 参照先ファイル(通常はヘッダファイル)の内容をただ単純にコピーして展開するもの。#define
もただ置き換えるだけなので、そういうものだと思っておけばよいかと。
・参考サイト: https://monozukuri-c.com/langc-include/
C#におけるusing System;
とか
名前空間を省略して書けるようにするもの。
例えばusing System;
って書いておけば、System.IntPtr
をIntPtr
と書いてもコンパイラが探して補完くれる。
・参考サイト: https://ufcpp.net/study/csharp/sp_namespace.html
・C#本家(英語): https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive
なお、上記は「usingディレクティブ」といい、
using(型名 変数名=xxx){処理}
は「usingステートメント」といい、別モノです。
C#における[STAThread]
属性
スレッドの管理がイケてないCOM機能や、間接的にそのCOM使っている.Netのクラスを使うときは[STAThread]
つけてね
という感じ。
つけ忘れてハマるよりは、つけておくほうが無難。
(Single-Thread ApartmentとMulti-Thread Apartmentの概念が理解できておらず、おまじないレベルから脱却できてない・・・)
参考サイト: https://dobon.net/vb/dotnet/form/stathread.html
メイン関数
C,C#とも、コンパイラに、最初に開始する処理がどこにあるかを判断させるために、あらかじめ決められた関数名(メソッド名)を使っている。dll作るときは別の手段を取る。