クラス(class)とは
クラスは値や変数、メソッドなどをひとまとまりにしたものです。
とりあえずこれだけ覚えておきましょう。
もう少しちゃんと書くと、クラスはユーザー定義型と言って、開発者が変数やメソッドを自由に組み合わせて1つの新しいデータ型として定義したものです。
型なのでintやstringと同じように変数に入れて使います。
C#では分類ごとに変数、メソッドなどをひとまとめにしたクラスをいっぱい用意し、
それらを組み合わせながらプログラムを作っていきます。
英語classの意味としては、共通の性質を有する部類が近いと思います。
C#でのクラスは関係性のある変数、メソッドを1つにまとめるための仕組みです。
なんでまとめるの?というとC#がこうした方が効率よくプログラミングができるよという考え方(オブジェクト指向)に基づいているからです。
オブジェクト指向について気になった方はこちらを見てください。
クラスの作り方(定義)
クラスの定義はこんな感じです。
class クラス名{ }
波かっこ { } の中に変数やメソッドを書いていきます。
クラスのメンバーについて
クラスの中に書かれた変数やメソッドのことをメンバーといいます。
public class Point
{
// 変数
private int x;
public int y;
// メソッド
public void SetValue(int valueX, int valueY) {
x = valueX;
y = valueY;
}
}
上のクラスの場合、メンバーは「x、y、SetValue」になります。
クラス内の変数のことをフィールドといいます。
他にもクラス内に定義することができるメンバーにはいろいろ種類があり、その中から目的にあったものを選んで定義に記載します。詳細は別記事(下の表・メンバーの種類のリンクから移動できます)で説明します。
はじめにすべてを覚える必要はありません。フィールド(変数)とメソッドくらいでいいと思います。
メンバーの種類 | 説明 |
---|---|
定数 | クラスが持つ定数(変更不可の値)のこと |
フィールド | クラスが持つ変数のこと。 外部(クラスを使う側)からはアクセスできないようにしておく(後述のアクセシビリティ参照)ことが多い。 |
メソッド | クラスが持つ処理。 |
プロパティ | クラス外部からクラス内部のデータ(フィールドなど)にアクセス(設定、取得)するためのもの。 |
インデクサー | クラスを配列のように使用できるようにするもの |
演算子 | 定義したクラスに対して演算子(+とか)を使ったときにどうするかを決めるもの |
イベント | クラスから発生する通知 |
コンストラクター | クラスの初期化を行うための特殊なメソッド。 コンストラクター内でフィールドの初期値を設定したりする。 クラスがnewで作成された際に呼び出されるメソッド。 |
ファイナライザー | クラスを使い終わって破棄されるときに実行される特殊なメソッド。 |
型 | クラス内に定義されたユーザー定義型(classやenumのこと。クラスの中にクラスを定義する感じ) |
クラスとクラスメンバーのアクセシビリティ
classの前や変数の型の前、メソッドの前にpublic、privateというキーワードがありますが、これはクラスとそのメンバーにはどこからアクセスできるのか指定しないといけないからです。これをアクセシビリティといいます。
またアクセシビリティは省略することができて、その場合はprivateになります。
とりあえず、publicとprivateの2つを覚えておきましょう。
- public:どこから(クラス内やクラスを使う側)でもメンバーにアクセスできる
- private:このクラスからしかメンバーにアクセスできない
ほかにはこんなものがあります。
- protected:メンバーを持っているクラスまたはそのクラスから派生したクラスからアクセスできる
- internal:現在のアセンブリ(.exe、.dll)内のクラスからアクセスできる
- protected internal:メンバーを持っているクラスまたはそのクラスから派生したクラス、または同じアセンブリ内のクラスからアクセスできる
なんでアクセシビリティがあるのかというと、外部にはメンバーを必要なものだけ公開することによって、外部からの誤操作でデータが書き換えられてしまうのを防止することが出来ます。
少し話が逸れますが、メソッドの中で宣言された変数はローカル変数と呼ばれアクセシビリティの指定はできません。そのメソッドの中でしか使用できません。
クラスの使い方
こんなクラスがあるとしたら、
public class Point
{
// 変数
private int x;
public int y;
// メソッド
public void SetValue(int valueX, int valueY) {
x = valueX;
y = valueY;
}
}
こんな感じで使います。
// クラスを使えるようにする
Point p = new Point();
// クラスのメソッドを実行
p.SetValue(10, 20);
// クラスのフィールドの値をコンソールに表示
Console.WriteLine(p.y);
詳しく解説していきます。
インスタンスの作成(new)
まずnewのところ。
クラス名(型名) 作成したクラスを入れる変数名 = new データ型(必要なら引数);
Point p = new Point();
クラスの定義はC#に「このプログラムはこんなデータ型を使うねー」と教えているだけで、実際に使うにはnewというキーワードを使ってクラスを使える状態(インスタンスを作成する)必要があります。
そして使える状態になったもの(インスタンス)を変数(Point p の p が変数)に代入します。クラスはユーザー(コードを書いた人)が作った新しいデータ型なので、Pointというデータ型になり、変数pはPoint型の変数ということになります。
コンストラクターについて
new Point(); の かっこ( ) の部分にはコンストラクターに渡す引数を指定します。
サンプルのPointクラスにはコンストラクターが定義されていないので、かっこの中には何も指定しません。
コンストラクターはクラスを使える状態にするときに実行される特殊なメソッドになります。コンストラクターではクラスメンバーの初期化を行ったりします。
コンストラクターの詳しい説明はこちらを見てください。
インスタンスについて
いきなり出てきたインスタンスについてです。
とりあえずクラスを使えればいいやという人は飛ばして下さい。
newキーワードを使用すると、クラスの定義を元にパソコンのメモリー上にクラスのメンバーを格納する場所が確保されて使用できる状態になります。その確保されたものがインスタンスです。
そしてインスタンスへの参照情報が戻り値として返ってきます。
また、インスタンスへの参照情報を代入した変数のことをオブジェクトといったりします。
インスタンスについての詳細はこちらを見てください。
クラスメンバーへのアクセス方法
クラスを使用する場合、インスタンスへの参照情報が入った変数(オブジェクト)を使ってクラスのメンバーにアクセスします。
クラスの持っている各メンバーにアクセスするには、ドット「.」を使います。
クラスのインスタンスが入った変数.メンバー名
といった感じです。
Point p = new Point();
p.SetValue(10, 20); // PointクラスのSetValueメソッドを実行
Console.WriteLine(p.y); // Pointクラスのフィールドy の値を表示
クラスメンバー(フィールド)の初期化
newキーワードのところでフィールドの初期化も同時に行えます。
ただしそのメンバーにアクセスできる場合のみです
(privateで宣言されたフィールドはだめってことです)。
var point = new Point() { y = 20 };
まとめ
いきなりnewキーワードがでてきて訳わからないと思いますが、
インスタンスやオブジェクトはC#を勉強するときの壁のひとつです。
C言語のポインターみたいな考え方なので難しいです。
とりあえず、クラスを使うにはnewが必要なことだけ覚えてください。
今回のまとめです。
- クラスは変数、メソッドなどをひとまとめにしたユーザーが自由につくれるデータ型
- クラス内に宣言された変数、メソッドなどのことをメンバーという
- クラスやメンバーにはどこからアクセスできるかアクセシビリティを設定する必要がある
- クラスを使えるようにするにはnewキーワードを使ってインスタンスを作る必要がある
- クラスのメンバーにアクセスするにはドット「.」を使う
全体のソースです。
using System;
class Program
{
static void Main(string[] args)
{
var p = new Point();
p.SetValue(10, 20);
Console.WriteLine(p.y);
}
}
public class Point
{
// 変数
private int x;
public int y;
// メソッド
public void SetValue(int valueX, int valueY) {
x = valueX;
y = valueY;
}
}
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント