C# Guide

C#はC言語の後継言語で「C言語より半音高い(#)仕様?」の言語です。
C → C++ → C# とレベルアップしています。
ちなみにC言語に対抗してD言語なども一時期出てきていたのですが、その後どうなったのでしょう?
C#はC言語の後継としてすっかり定着したようで、使い慣れると確かに便利な点が多々見受けられます。
C言語に慣れたプログラマーがC#を学ぶのは言語構造が良く似ていることもあり簡単だと思われます。
当然のことながら似ているからと言ってC#はC言語と同じではありません。
私の経験からC#とC言語を比較して、便利な点や注意しなければならない点をまとめてみました。

前田稔の超初心者のプログラム入門

C#プログラム言語

  1. C言語からC#に変わって最も有難く思ったのはプロトタイプ宣言が不要になったことです。
    C言語ではヘッダーファイルで使用する関数のプロトタイプ宣言が必要だったのですが、ヘッダーファイル自体が無くなりすっきりしました。
    C言語でも後位参照が起こらなければ宣言を省略できたのですが、C#ではプロトタイプ宣言そのものがなくなりました。
    これに代わるものが using の指定で、どの関数を使うときに using に何を指定しなければならないのかがわかり難く何時も悩まされます。
  2. C言語では Console Mode と Windows Mode とでは全く別の言語と思われるほど違いがありました。
    C#でも文字で印字するのと画像で描画するのとでは違いがあるのは当然ですが、Console Mode の知識を活かすことが出来ます。
    特に CLI(Command Line Interface) で Windows Program を作成すると、Console Mode と同じ感覚で作成することが出来ます。
    詳細は ウインドウを表示 を参照して下さい。
  3. Tool Box が用意されていて Button や Text Box や Picture Box や メニューなどをドラッグ&ドロップするだけでプログラムに組み込むことが出来ます。
    従って、ソースコードの書き方を知らなくても自由にツールが使えるようになりました。
  4. 何と言ってもC#のメリットは string 機能が充実したことでしょう。
    初期のC言語では文字列は文字の配列(char[])を使っていました。
    これでは文字列の長さの問題や代入や比較や一部削除や挿入や置き換えも大変で文字列の処理に苦労したものです。
    C#以前にもストリング機能はあったのですが、C++ や STL や C++ Maneged や Windows8(10) や MFC で独自のストリング仕様が定義されていて、関数や書き方が異なり混乱を招きました。
    C#の string は機能が充実していて、代入や比較はもちろん連結や検索や一部削除や挿入や置き換えも簡単に行うことが出来ます。
    また文字列を区切り符号(カンマや空白など)で切り分けて配列にすることや、配列を繋ぎ合わせて文字列にする機能もあります。
  5. 当初 Windows の文字コードには Shift_JIS(ANSI) が使われていましたが最近では Unicode が主流になってきました。
    C#では内部コードに Unicode(16ビット)を使用しています。
    ファイルのコードは Shift_JIS, utf-8, utf-16, EUC など様々で、これらのコードと内部コードの変換機能も充実しています。
    最近(2022年)ではファイルの文字コードは utf-8 が主流で、私の経験では BOM 付きの utf-8 がお勧めです。
    詳細は Store Guide から文字コードの説明を参照して下さい。
  6. メモリー保護の観点からC言語でお馴染みのポインターが使えなくなっています。
    あえて使うときは unsafe を設定をしなければなりません。
    詳細は Pointer を使う を参照して下さい。
    ポインターに代えてパラメータを通じて値を持って帰るときは out 属性を指定します。
    パラメータの値を参照して持って帰るときは ref 属性を指定します。
    詳細は Sort XYZ を参照して下さい。
  7. C言語では割り当てたメモリ領域は、プログラムで開放しなければなりませんでしたが、C#ではガーベージコレクションが働いて自動的に開放してくれます。
    メモリの開放作業に煩わされること無く、プログラムに専念することが出来ます。
  8. string や配列などプログラムで扱う多くのデータは Object Class で定義されています。
    各 Object Class にはデータを処理するための便利なメソッドが用意されています。
    その代償としてパラメータとして渡した Object Class(配列など)の値を変えると、元のデータに影響が及ぶことです。
    このあたりが最もわかり難いところでしょう。
    詳細は Parameter を参照して下さい。
  9. 他にもC言語には無いメリットは沢山ありますが、私が経験した感じではプログラミングの効率が30%以上改善しそうで皆様にお勧めの言語です。

超初心者のプログラム入門(C#)