C#プログラミングの基礎【現役エンジニアがわかりやすく解説】

PROGRAM

C#プログラミングの基礎を知りたい方に。

この記事を読まれている方は、

  • C#のプログラミングがどんなものか知りたい
  • C#言語の簡単な書き方が知りたい
  • C#が使われる場面を知りたい

おそらくこのように考えている方が多いと思います。

この記事を書いている私は、
プログラミング未経験から転職を果たした現役のWeb系エンジニアです。
エンジニア歴は3年ですが、本業とは別にフリーランスの副業で月10万円ほど、多いときで20万円ほどの収入があります。

この記事では、現役のエンジニアが、C#プログラミングの基礎を解説しています。

プログラミング言語のC#の特徴

プログラミング言語のC#の特徴

C#はプログラミング言語のひとつで、静的型付けのコンパイル言語で、オブジェクト指向型の言語です。
※ただし、動的型付けの部分もあります。

静的型付けの言語とは、簡単に言うと、データを文字列型や数値型、論理型などに分ける必要がある言語のことです。しかし、C#はvarというあいまいな型でもデータを持たせることができるので、動的型付けの側面もあります。(はっきりと分ける必要は必ずしもないということです。)

コンパイル言語とは、プログラムの実行前に、開発者の方でコンパイラーを使って構文チェックなどをしたうえで中間言語に変換しないと動作しない言語のことです。

一方、コンパイル言語と対をなすスクリプト言語とは、プログラム実行前にコンパイルをする必要のない言語のことで、書いた後はすぐにプログラムを実行することができる言語のことです。

一般に、コンパイル言語は、処理速度がスクリプト言語に比べて速くなります。速度が求められる処理では、コンパイル言語が使用されることが多いです。
C#の速度の目安としては、Javaとほぼ同じぐらいで、若干Javaより速いです。

オブジェクト指向型言語とは、オブジェクトという概念を持つ言語のことで、簡単に言うと、データ構造として、配列や構造体に加えて、オブジェクト(クラス)があるということです。
オブジェクトのおかげで、ソースコードのメンテナンスがしやすかったり、機能の流用ができます。

C#は、静的型付けのコンパイル言語のため、きちんと型定義を行う開発をしたいという場合や処理速度を上げたい場合にオススメの言語です。
C#を使う最大のメリットとしては、後ろ盾にMicrosoftがいるということです。そのため、Windows向けに最適な開発が行える点、使いやすい統合開発環境(IDE)であるVisual Studioが使える点が明らかに他の言語よりも優れています。

Visual StudioではVB.NETという言語も使われていますが、C#の方が、サンプルが多く、C言語の語感がある方にとっては書きやすい言語となっています。

C#を使えば、アプリを作ることも可能ですし、ASP.NETでWeb系のプログラミングを行うこともできます。読者の方もWebサイトで拡張子がaspxになっているページを一度は見たことがあると思います。あれがASP.NETで作られているページです。

また、C#を使えば、AndroidやiOSのアプリを開発することも可能です。

つまり、C#は、Windowsアプリ、スマホアプリ、Web系のいずれのプログラミングも可能というわけです。Javaに近いオールラウンド性を誇る言語です。

C#の用途

C#の用途

C#は静的型付けのコンパイル言語ということもあり、速度が重視される開発でも利用することが可能な言語です。

C#を使えば、たいていのことは何でもできてしまうため、用途は通常のアプリからWeb系まで幅広くあります。
スマホアプリ開発で使う場合、C#でコーディングができますが、コンパイル時にJavaやObjective-Cに変換される形となります。

また、C#は、静的型付けの言語であるものの、動的型付けにも対応しており、コーディングに不慣れな方でも気軽に取りかかることのできる言語で、学習のしやすい言語です。
イメージとしては、JavaとJavaScriptを混ぜたような言語です。

しかし、決してPHPのような軽すぎる言語というわけではなく、きちんとしたプログラミングができるので、素人から玄人まで愛される言語です。

C#の書き方

C#の書き方

ここでは簡単に書き方を少しだけ紹介します。実際に始める気になったら、ぜひ参考書などの教材を参考にして、試してみて下さい。

Hello World!を画面に出力する

まずはお決まりのHello World!という文字列を画面に出力する方法から。

public class YourClass{
    public static void Main(){
        System.Console.Write("Hello World!");
    }
}

これで出力することができます。
C言語やJavaなどと同じように、main関数を書かなければ動きません。クラスも実装しないといけないので、オブジェクト指向が強制されています。

コンパイル言語のため、プログラム実行前には必ずコンパイラーを使って中間言語に変換する必要があります。

変数宣言と分岐処理

次は少し踏み込んで、変数宣言と分岐処理をしてみます。

public class YourClass{
    public static void Main(){
        int age = 19;
        if (age < 20) {
            System.Console.Write("未成年");
        } else {
            System.Console.Write("成人");
        }
    }
}

上記の例では、まずageという数値型の変数を作り、その中に19という数値を入れています。
次にageが20未満であれば”未成年”という文字列を、それ以外であれば”成人”という文字列を出力するような分岐処理をしています。

配列と繰返処理

続いて、配列の使い方と繰返処理について、解説します。

ここでは配列を作って、以下のようにデータを出力することにしましょう。

佐藤,田中,小林

これを出力するコードは以下です。

public class YourClass{
    public static void Main(){
        string[] students = new string[3]{"佐藤","田中","小林"};
        for(int i = 0; i < students.Length; i++) {
            System.Console.Write(students[i]);
            if (i < students.Length-1) {System.Console.Write(",");}
        }
    }
}

上記の例では、まず文字列型の配列studentsに「佐藤」「田中」「小林」の3つの文字列を格納しています。
その後、数値型のカウンタ変数iを0に初期セットし、配列studentsの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、Console.Write関数を使い、配列studentsのi番目の要素の値を出力し、最後の要素以外、その後に「,(カンマ)」を出力しています。

構造体の取り扱い

最後に構造体の取り扱い方法について解説します。

ここではエクセルのようなデータを作って、以下のようにデータを出力することにしましょう。

名前:佐藤,性別:男性
名前:田中,性別:女性
名前:小林,性別:女性

これを出力するコードは以下です。

using System.Collections.Generic;

public class YourClass{
    public static void Main(){
        Dictionary<string, string> first_row = new Dictionary<string, string>(){{"A","佐藤"},{"B","男性"}};
        Dictionary<string, string> second_row = new Dictionary<string, string>(){{"A","田中"},{"B","女性"}};
        Dictionary<string, string> third_row = new Dictionary<string, string>(){{"A","小林"},{"B","女性"}};
        Dictionary<string, string>[] excel_data = new Dictionary<string, string>[3]{first_row, second_row, third_row};
        
        for(int i = 0; i < excel_data.Length; i++) {
            System.Console.Write("名前:"+excel_data[i]["A"]);
            System.Console.Write(",");
            System.Console.WriteLine("性別:"+excel_data[i]["B"]);
        }
    }
}

上記の例では、まずfirst_row, second_row, third_rowという、キー・値がともに文字列型の連想配列を3つ作り、Aというキー(列)に名前を、Bのキーに性別の値を入れていきます。
そして、それら全てをexcel_dataという連想配列型の配列に入れます。
その後、数値型のカウンタ変数iを0に初期セットし、配列excel_dataの要素の数に到達するまでループでiを1ずつ増やしてまわしていきます。その際に、Console.Write関数を使い、配列excel_dataのi番目の要素の中のA列とB列の値を出力しています。

補足ですが、Dictionaryという連想配列型を使うために、プログラムの先頭でSystem.Collections.Genericクラスをインポートしています。

まとめ:C#は強力な後ろ盾がいて何でも開発できる言語

まとめ:C#は強力な後ろ盾がいて何でも開発できる言語

C#の良さを簡単にまとめると、以下のとおりです。

  • コードが書きやすい ← フレキシブルな型付け
  • 何でも開発できる ← Windows・スマホ・Web系アプリに対応
  • 強力な後ろ盾とIDE ← Microsoft製でVisual Studioが使える

つまりC#は、Microsoftという強力な後ろ盾がいて、Visual Studioという使いやすいIDEにも恵まれ、様々なアプリが開発でき、かつ書きやすい言語ということになります。

最近MicrosoftがXamarinを吸収したこともあって、スマホアプリにも対応したので、トレンドにも付いていけるので、長く安定して使える言語なのではないかと思います。ただし、Web系の場合は動かすためにはMicrosoft製のIISというWebサーバーソフトが必要になるので注意が必要です。(Apacheでは動きません。)

C#は静的型付けの言語でオブジェクト指向色が強い言語なので、独学は少し難しいかもしれません。もし独学でできなさそうな方は、プログラミングスクールも手段の一つに入れると良いと思います。