Re:ゼロから始めるC#

C#を突然仕事で使うことになった人

JavaばっかやってましたがC#を使うことになったので備忘録的に…なんて日もあった

Level1 初めてのC#~Hello World~

王様「さぁ勇者よ。今こそ魔王(受注案件)を倒すのじゃ!」
勇者「しかしながら王様、私には武器(開発環境)もなければスキル(知識)もありませんゆえ…」
王様「そこにWindows環境とVisualStudioがあるじゃろ?」
勇者「(VisualStudioは俺がインストールしたけどな?)」
王様「スキルなんてのは酒場で聞くもよし(ググレカス)、戦場で経験値を稼ぐもよし(テストコード書きまくれカス)」
勇者「藤原千花ちゃんみたいな可愛い娘が嫁に来てくれないと頑張れない…」
王様「もういいから!受注しちゃったから!敵(納期)もすぐそこまで来てるから!はい、行った行った!」
勇者「それか中野さんちの5人姉妹と仲良く暮らす権利を!」
王様「ほう?ちなみに誰派?」
勇者「圧倒的よつb―」
王様「そやつを叩き出せ!どう考えても三玖しかないだろカス!衛兵!衛兵!」
勇者「みんなちがってみんないいでしょおおお」

はい、ということで。
別案件に追われていましたがこちらも少しずつやっていきたいと思います。
この間C#について少しだけ調べたんですけどまぁ101番道路のジグザグマ倒したくらいの経験値しか得られなかったので1レベからスタートしていきたいと思います。
ちなみに5等分の花嫁では四葉が一番好きですがみんな可愛すぎるのでみんな好きです。

VisualStudio

冒頭でも言ってたVisualStudioってなに?ってとこなんですが、いわゆるIDEというもので開発するのに楽な環境のことです。
JavaではEclipseIntelliJVSCodeとかがそれに該当します。
正直メモ帳に書くだけでもプログラムというのは作れるのですが、見にくいしインデントとか合わせるのだるいしいいことといえば軽いくらいです。
おとなしくIDE使いましょう。
この辺は[VisualStudio インストール]とか調べればめっちゃ出てきます。自分もそれで入れました。
あと[VisualStudio テーマ変更]とか[VisualStudio フォント変更]とかでも調べると幸せになれます。
白いと目がチカチカ(書記のチカ、書記のチカ、ラー!)するので自分は大体黒っぽいテーマを選んでます。

f:id:chankato:20190212103718j:plain
藤原書記可愛いの図

プロジェクト作成

開くと「はじめに」みたいなのが表示されるんですけどとりあえずガン無視でプロジェクト作成したいと思います。
左上のほうにある[ファイル]>[新規作成]>[プロジェクト]と選択していきます。
f:id:chankato:20190212105043p:plain
するとこんな画面が表示されると思うんですけどここでさっそくわからん殺しが来ます。
これどれ選べばええのん?

自分が今回作りたいのはGUIのアプリケーションなのでコンソールアプリとかクラスライブラリは少なくとも違うんじゃないかなと思います。
そうなると上2つのどちらかなんだけどわからんので調べてみました。

WPFアプリ

Windows Presentation Foundation (WPF) は、デスクトップ クライアント アプリケーションを作成する UI フレームワークです。~~(この後めっちゃ書いてあるけどよくわからん)」
UIフレームワークとか書いてあるので今回の目的には沿ってそうです。
もうちょい頑張れよって人のためにもう少しだけ調べたことを簡単にまとめます。

  • 画像描画がベクタ形式
  • dpiを意識しなくても良い
  • 多少高機能だが描画の癖が強く扱いにくい

なるほどね。(わかってない)
とりあえずこんな感じです。

Windowsフォームアプリケーション

Windows Formsはマイクロソフト.NET Frameworkに含まれるグラフィカルユーザーインターフェイスAPIの名称である。
結局UIのAPIなのでこれでもよさそうです。
もうちょい頑張ってまとめたのが以下です。

  • 画像描画がラスタ形式
  • dpiを意識しないと環境によって表示がおかしくなる
  • 機能的にはWPFに劣るが扱いやすい

なるほどね。(わかってない)
難しそうなのでこっち使いたいな…

結局どっち使えばいいのん?

俺も調べたけどよくわかんねぇ…けどざっくりというとこんな感じらしいです。
「使い分けのイメージとしては、ビジネスがFormsで、ゲームがWPFです。
あるいは、四角い箱に文字を入れるのが中心ならForms、 アニメーション、3DCG、タッチパネルが中心ならWPF。」
超わかりやすい!
今回はビジネスで使うものなので上から2番目のWindowsフォームアプリを選択します。
※このままOK押すともう作成されちゃうので変えたかったら名前とか変えておきましょう。
 自分はとりあえずデフォルトのままにしました。
 でも先に1個作ってたので名前が2になってます。

プロジェクト作成後

OK押すとこんなのが出ると思います。
f:id:chankato:20190212112400p:plain

ではさっそく進めていきたいのだけれど、ちょっとわかんないことがありました。
さっき適当に指定したソリューションって何?

ソリューションとは

なんか位置づけ的にはJavaとかのプロジェクトのことでいい気がするんですがどうなんでしょう?てことで何が違うか調べてみました。

プロジェクト

Visual Studio でアプリ、Web サイト、プラグインなどを作成するときは、"プロジェクト" から始めます。 論理的には、実行可能ファイル、ライブラリ、または Web サイトにコンパイルされる、すべてのソース コード ファイル、アイコン、イメージ、データ ファイルなどがプロジェクトに含まれています。」

ソリューション

「プロジェクトはソリューション 内に含まれます。 ソリューションは、その名前にもかかわらず、"答え" ではありません。 1 つ以上の関連するプロジェクト、およびビルド情報、Visual Studio ウィンドウの設定、特定のプロジェクトに関連付けられていないその他のファイルに対するコンテナーに過ぎません。 ソリューションは独自の形式を持つテキスト ファイル (拡張子 .sln) で記述され、手動での編集は想定されていません。」

よくわかんないんだけど…

こういうのって読んでも大抵わからないよね…
もうちょいかみ砕いたの探してみます。
「1つのソリューションで、アプリ全体を管理することが一般的。つまり、「ソリューション=実際のアプリ」というケースがほとんどである。」
ってのがありました。
ソリューションとプロジェクトの関係性としては1:nになっていて1つのソリューションに複数のプロジェクトが存在している、というイメージであってるようです。
正直あんまわかんなかったんですけどその関係性だけわかったからひとまずいいかなってことにして先に進みます。誰かIQ3の私にも説明できそうならばお願いします。

エントリーポイント

ソリューションエクスプローラー(左のとこ。なんも設定してないと右にあるかも)を見てるとMainのとこを見つけたのでここがエントリーポイントなんだと思います。
ってかコメントにそう書いてあるのでそうでしょうね。
エントリーポイントってのはプログラムを実行したとき一番最初に呼ばれるところです。
f:id:chankato:20190212114450p:plain

Javaと比較して目に付くのはまず1~5行目の宣言にある

using

ってやつですね。言葉の意味とか位置からしJavaで言うところの

import

のことなんじゃないかと思います。

あとは7行目の

namespace

Javaだとクラス名が書いてあるところですが、少し違うようです。
自分はソリューション名もプロジェクト名も同じにしてしまったのでこれがどっちを指すのかわかりません。
なのでリファクタリング(名前変更)してソースが書き換わったほうを指してるのだろうなと思い片方ずつ変えてみたんですけども…
どっちを変えてもソースがかわんねぇ…えぇまじか。よくわかんないな…
試しに両方ともリファクタリングした状態でF5を押して見たんですけど問題なくビルドできちゃうんご。
Javaだと絶対エラーになると思ったんですが…

仕方ないのでプロジェクトを新規で作って名前を変えてみたところ
どうやらnamespaceではソリューション名ではなくプロジェクト名が指定されているようでした。

さっきちょっとフライングしてやっちゃったんですけどF5ボタンでデバッグの開始ができるようです。
ちなみに今の状態で実行するとこんな画面が表示されます。
f:id:chankato:20190212115840p:plain

あ!これ進研ゼミでやったやつだ!
はい、そうです。なんか最初に見た画面で出てきたやつですね。
話変わるけど進研ゼミでやったやつってか授業でやって進研ゼミでもやったやつってのが正しいですよねあれ。

16行目に

Application.Run(new Form1());

ってあるのでここでこのウィンドウを生成しているのだと思います。
んでこのForm1ってのはソリューションエクスプローラーにもあるのでそっち見てみたいと思います。

疲れたのでタイトル詐欺になりますが今回ここまでにします。
次回はボタンを押したらHello Worldって出すくらいまでをやってみたいと思います。

今回の獲得経験値

獲得量:53
次回レベルアップまで:47
獲得スキル:なし
解放実績:なし