はじめに
みなさんアクセス装飾子ってちゃんと理解できてますか?
わりと適当にpublicにしたりprivateにしたりしてないでしょうか?
自分は初心者のときに結構してました...
そこで分かりやすく基本的なアクセス装飾子の解説を今回したいと思います!
アクセス装飾子の種類について
主な種類としては
・public
・private
・internal
・protected
とありますが今回は最も使うpublicとprivateのお話をします。(internalとかprotectedはファイルだったり継承あたりが絡んでくるので小難しくて頭パンクするのでという言い訳)
publicとは?
これはpublic(パブリック)と読みます。
これは言ってしまえばどこからでもアクセスしていですよーと言うアクセス装飾子になります。
ここで例を見てみましょう!(例としてプレーヤークラスと言う形で上げてます)
public class Player
{
public string m_PlayerName;
//プレイヤーの名前を取得するメソッド
public string GetPlayerName()
{
return m_PlayerName;
}
}
上記のようなクラスがあったときます。
そしてこのクラスではm_PlayerNameという変数とSetPlayerNameというメソッドが用意されています。
そしてこれを外から呼び出したい!ってときはpublicにするイメージです。
例を出すとこんな感じです。
public class Manager
{
public Player m_Player=new Player();
//Playerクラスをインスタンスして呼び出せる。
Player.m_PlayerName="プレイヤー名";
//メソッドも同じように呼び出せる。
var playerName= Player.GetPlayerName();
}
ただこれだとあれ?
なんでManagerプレイヤーの名前もセットも取得もしているの?
って感じがするのでここで次に説明するprivateがあるわけです。
privateとは?
これはprivate(プライベート)と呼びます。
名前から察せると思うのですがそのクラスでしか使いたくないときに使います。
ほかでは絶対に呼ばせたくないときに使いますね。
早速先ほどのコードを例にしてみていましょう。
public class Player
{
//今回はここをプライベートにかえるのと初期値としてPlayerNameを代入しておく。
private string m_PlayerName="PlayerName";
//プレイヤーの名前を取得するメソッド
public string GetPlayerName()
{
return m_PlayerName;
}
}
このようにm_PlayerNameだけプライベートにしてみました。
ではこれをManagerクラスでの例をみてみましょう。
public class Manager
{
public Player m_Player=new Player();
//privateなので呼べません
//Player.m_PlayerName="プレイヤー名";
//メソッドは変わらずpublicのままなので呼べます。
var playerName= Player.GetPlayerName();
}
先程のようにほかのクラスの変数を直接別のクラスで代入するのはぶっちゃけナンセンスなのでManagerクラスではPlayerクラスの名前だけ取得できるようにするという形にするのが個人的には良いと思います。
総括
わりとprivateでいいものをpublicにしてしまっていたりとか言う経験はみなさんあるのではないでしょうか?
もちろん最初からすべて完璧な装飾子にする必要はないですが極力publicとprivateは意識しておくとなんでもかんでも依存をしてしまうということを少しでも防げる設計にできるのではないかとおもいます。
すごく簡単なことですがぜひ意識していきましょう!!
おわり