C#備忘録 その①
■C#を学習しています。
C#とはプログラミング言語でゲーム制作など幅広いジャンルで使用されている言語になります。
なぜ学習を始めたかというと、仕事でゲーム制作をしておりメインはデザイナーなのですが自分でもゲームが作れるようになっておきたいと考えたためでした。
仕事で使うわけではないのですが、本職と別の勉強をすることで気がまぎれたり気分転換になるからという半分以上趣味で勉強しています。
以前はunityを通して一度学習に踏み切ったこともあるのですが、オブジェクト指向プログラミングとは…?
というところで躓いてしまったので、また書籍を元に一から勉強を始めました。
※これは学習の備忘録であってC#の内容を説明するためのものではありません。
-------------------------------------------------------------------------
最初はコンソールに出力するところから始まり、変数代入、if文、for文、メソッドの作成。
このあたりは難なくこなしていきます。(まだ細かいところはあやしい…)
配列などのを終えるとついにオブジェクト指向の根幹にかかわる項目、クラスです。
クラスはオブジェクトの金型というイメージで、
ガンプラというクラスを用意しクラスの中に名前、グレードといった変数を用意し
どういった動きをするのかというメソッドを用意します。
public class GunPla()
{
//メンバ変数
public string name;
public string grade;
//メンバメソッド
public void Motion()
{
Console.WriteLine(this.name + "は変形した");
}
}
ちなみにクラスの変数をメンバ変数、クラスのメソッドをメンバメソッドと呼ぶ。
そしてインスタンスを作成し、クラスガンプラという金型でHG Zガンダムを作成する。
クラス ガンプラ
名前 Zガンダム
グレード HG
動き 変形する
いつも GunPla Zgundam = new GunPla(); この部分が謎だったんですが
ここで新しいZgundamというインスタンスを作成するという意味だったんですね。。
そしていつもよりちょっとオブジェクト指向への理解が進み、コンストラクタへ進みます。
・コンストラクタはクラスをnewしたときに実行される関数
・インスタンスを作ると同時にメンバ変数に初期値を代入する仕組み
とのこと。
クラスが複雑になってくると、初期値の代入(名前やグレード)の書き忘れが発生する可能性があるので
そこでのミスを防ぐためのものといった感じ。
先ほどのクラスに
public GunPla()
{
this.name = name;
this.grade = grade;
}
といれておくことでなにも名前とグレードが設定されていないときの初期値をいれておくことのようでした。
これでさきほどのプログラムだと名前のところが「nameは変形した」と表示されるようになります。
ここでインスタンスを作成する際に初期値を設定する引数付きのコンストラクタがあるのも忘れずに。(たぶんこの使い方がメインになる気がする。)
そして今一番理解に苦しんでいるのが”カプセル化”です。
やってることは簡単で、クラスで設定したメンバ変数へのアクセスを禁止して
メンバメソッドのみアクセスできるようにするというもの。
大人数でプログラムを書いていくと、大元のクラスの変数をころころ変えられてしまうと
一体どこでなにをやってるかの把握が難しくなるため、鍵をかけて変数にアクセスする手段を限定しよう。というものと理解しています。
とはいえ、変数をいじれないと困ってしまう場合がある(例えばRPGで初期に設定したHPなどは、ゲームの進行で増減がある)ため
メンバ変数にアクセスするための手段としてのメソッドを作成する。
そのメソッドを”アクセサ”と呼ぶ。
言ってることはすごくよくわかるのですが、一から自分でプログラムで書くとなると
なかなかに理解の難しいところでした。。(今後繰り返しやらないと身につかないと思う)
-------------------------------------------------------------------------
以上がC#の勉強を始めて数日(勉強時間にすると5,6時間?)での所感でした。
今後も備忘録として、成長日記としてたまに更新したいです。