プログラムの規模が大きくなるほど、データと処理を整理してまとめることが重要になります。
C#のクラス(class)は、そのための基本となる仕組みです。
本記事では、クラスの役割と作り方の基本から、Visual StudioやVS Codeでの新規作成手順、そして初心者がつまずきやすい注意点までを、サンプルコードと実行結果を交えて丁寧に解説します。
C#のクラス(class)の基本
クラスの役割とメリット
クラスは、データ(状態)と処理(ふるまい)をひとまとめにする設計図です。
クラスを使うことで、似た性質のものを1つの型として定義し、何度でも同じ構造のインスタンス(オブジェクト)を作成できます。
これにより、プログラムの見通しが良くなり、変更や拡張が容易になります。
特に初心者の方は、データだけを扱うのではなく、そのデータに対する操作もクラスの中に含める考え方を身につけると、保守性や再利用性が飛躍的に向上します。
どんな時にクラスを作るか
以下のような場面では、クラスを作ることが有効です。
たとえば、アプリ内で「ユーザー」「商品」「注文」のように実世界の概念を表現したい時、または「設定」「ログ」「計算ロジック」のようにまとまった責務を分離したい時にクラスが役立ちます。
処理が増え、関連するデータが散らばってきたと感じたら、それらを1つのクラスにまとめることを検討します。
C#のクラス(class)の基本構文
最小のクラス定義(空のクラス)
まずは最小の形から見ていきます。
これは中身のない空のクラスです。
// 空のクラス定義の最小例
public class EmptyClass
{
}
最小のクラスであっても、{ }
で囲むブロック構造が必要です。
クラスの外側に修飾子(例: public
)を書く点にも注意します。
名前空間(namespace)の書き方
クラスは通常、名前空間(namespace
)の中に配置して整理します。
プロジェクトやフォルダ構造に合わせて名前空間を付与すると、クラスの重複を避け、参照をわかりやすく管理できます。
// 名前空間を使ったクラス定義の例
namespace MyApp.Models
{
public class User
{
}
}
C# 10以降ではファイル先頭にnamespace MyApp.Models;
のようにセミコロン区切りで宣言する「ファイルスコープの名前空間」も使えます。
// ファイルスコープの名前空間(モダンな書き方)
namespace MyApp.Models;
public class Product
{
}
クラス名の付け方(パスカルケース)
C#ではクラス名はパスカルケース(PascalCase)が推奨です。
英単語の先頭を大文字でつなげます。
推奨(正) | 非推奨(誤) |
---|---|
Person | person |
OrderItem | order_item |
AppConfig | appconfig |
意味のある英単語を使い、略語をむやみに使わないことがわかりやすさにつながります。
ファイル名とクラス名をそろえる
C#では、1つのクラスを1つのファイルに置き、ファイル名とクラス名を一致させるのが一般的です。
例えば、Person
クラスはPerson.cs
というファイルに定義します。
これにより、後から見直す時にクラスを見つけやすくなります。
ファイル名とクラス名が一致しないと、チーム開発で混乱の原因になります。
基本構文(サンプルコード)
ここでは、クラスの定義からインスタンス生成、プロパティの利用、コンストラクタでの初期化、メソッド実行、出力までを一通り体験できる最小構成の例を示します。
// Person.cs
// 人物を表すクラスの基本例。プロパティとコンストラクタ、メソッドを定義します。
namespace MyApp.Models
{
public class Person
{
// 自動実装プロパティ。外部から読み取り・書き込みできるよう public にしています。
public string Name { get; set; }
// 年齢はマイナスにならないようにしたい場合などは set を private にしてコントロールする設計も可能です。
public int Age { get; private set; }
// コンストラクタ。インスタンス生成時に初期化を行います。
public Person(string name, int age)
{
Name = name;
// 受け取った age を簡易チェックした上で設定
Age = age < 0 ? 0 : age;
}
// ふるまい(メソッド)の例。自己紹介の文字列を返します。
public string GetGreeting()
{
return $"Hello, I am {Name} and I am {Age} years old.";
}
// 文字列化。Console.WriteLine(person) と書いた時の見え方を整えます。
public override string ToString()
{
return $"{Name} ({Age})";
}
}
}
// Program.cs
// Person クラスを使う側のコード。エントリポイントから実行します。
using System;
using MyApp.Models; // Person の名前空間を参照
class Program
{
static void Main(string[] args)
{
// インスタンス(オブジェクト)の生成。コンストラクタに必要な情報を渡します。
var person = new Person("Taro", 20);
// プロパティにアクセス。必要に応じて値を変更できます。
person.Name = "Taro Yamada";
// メソッド呼び出しと出力
Console.WriteLine(person.GetGreeting());
Console.WriteLine(person); // ToString() の結果が表示されます
}
}
Hello, I am Taro Yamada and I am 20 years old.
Taro Yamada (20)
この例のように、クラスは「状態」(Name, Age)と「ふるまい」(GetGreeting, ToString)をまとめて表現します。
使う側(Program.cs)は、コンストラクタで初期化し、プロパティやメソッドを通じて操作します。
クラス(class)の新規作成手順
Visual Studioでクラスを追加する
Visual StudioではGUI操作で簡単にクラスファイルを追加できます。
コンソールアプリなどのプロジェクトを作成します。
プロジェクトの作成についてわからない場合は、以下の記事を参考にしてください。
ソリューションエクスプローラーで対象プロジェクトを右クリックし、追加 > クラス… を選びます。

名前にPerson.cs
などを入力し、必要であればフォルダー(例: Models
)を作成します。

生成されたファイルに、新しいクラス本体を記述します。
このように、ソリューションエクスプローラーでプロジェクトを右クリックし、「追加」→「新しい項目」→「クラス」を選び、名前にPerson.cs
のように入力して作成します。
作成直後はデフォルトの名前空間が付与されるため、フォルダ構成と一致しているか確認しておくと良いです。
クラス追加後は、プロパティやコンストラクタ、メソッドを順に記述します。
まずは空のクラスから始め、必要な要素を段階的に追加すると、誤りが混入しにくくなります。
VS Codeでクラスファイルを作る
VS Codeではコマンドラインでプロジェクトを作成し、エディタでファイルを追加します。
# コンソールアプリの新規作成
dotnet new console -n MyApp
cd MyApp
# モデル用のフォルダを作成し、クラスファイルを作る
mkdir Models
code Models/Person.cs
プロジェクトの作成はコマンドで行うのが基本ですが、ファイルの作成はサイドバーのファイルエクスプローラーから追加しても問題ありません。
エディタでPerson.cs
を作成し、namespace MyApp.Models;
のような名前空間を先頭に記述します。
次に、クラス本体を定義します。
最後にProgram.cs
でusing MyApp.Models;
を追加してクラスを利用します。
フォルダ構成とnamespaceの対応を決める
フォルダと名前空間を対応づけると、規模が大きくなっても探しやすくなります。
たとえば、Models
フォルダの中はMyApp.Models
、Services
フォルダの中はMyApp.Services
というようにします。
フォルダパス | 名前空間例 |
---|---|
MyApp/Models/Person.cs | MyApp.Models |
MyApp/Services/UserService.cs | MyApp.Services |
MyApp/Controllers/HomeController.cs | MyApp.Controllers |
プロジェクト開始時にルールを決めておくと、チーム開発や長期運用で効率的です。
作成時のコツと注意点(初心者向け)
1ファイル1クラスで見やすくする
初心者のうちは、1ファイルに1クラスを原則にすると、コードの位置を把握しやすく、レビューや修正も容易になります。
同名のクラスを複数ファイルに分割する機能もありますが、慣れるまでは使いません。
usingとnamespaceを整理する
クラスを利用する側では、必要な名前空間に対してusing
を追加します。
不要なusing
は削除しておくとコンパイルがわずかに速くなり、可読性も上がります。
IDEの「不要なusingの削除」機能を活用すると、自動で整理できます。
// Program.cs の先頭例
using System;
using MyApp.Models; // Person を使うために必要
// 不要なら以下のような using は削除
// using System.Text; // 今は使っていない
波かっこ{ }の閉じ忘れに注意
クラスやメソッドは{ }
で囲みます。
閉じ忘れるとコンパイルエラーになります。
エディタの自動補完やフォーマッタを有効にすると、構文エラーの早期発見に役立ちます。
// 閉じカッコの不足例(意図的に誤り)
public class Oops
{
public void DoSomething()
{
Console.WriteLine("Hello");
// } が2つ足りない
この場合、ビルド時にCS1513: } が必要ですのようなエラーが表示されます。
ビルドエラー時のチェックポイント
ビルドに失敗したら、エラーメッセージの先頭にあるコード(例: CS1513
)と行番号を手がかりに、直前に書いた変更点を重点的に見直します。
特に以下を確認すると直りやすいです。
namespace
とクラスの{ }
の対応が取れているかusing
が不足していないか(型が見つからないエラー)- ファイル名とクラス名が一致しているか
- セミコロン
;
の付け忘れがないか
参考として、ビルドエラーの出力例を示します。
Program.cs(6,1): error CS1513: } が必要です
Program.cs(10,22): error CS0103: 現在のコンテキストに 'person' という名前は存在しません
この場合、まずはProgram.cs
の6行目付近で}
の不足を解消し、その結果として発生している二次的なエラー(変数の未定義など)も連鎖的に解決します。
まとめ
クラス(class)は、C#のプログラムを整理するための最重要の基本要素です。
パスカルケースの命名や、ファイル名とクラス名をそろえる慣習、名前空間での整理を身につけることで、コードは自然と読みやすくなります。
まずは空のクラスを作り、プロパティやコンストラクタ、メソッドを一つずつ追加していく流れに慣れてください。
Visual StudioやVS Codeの支援機能も活用し、ビルドエラーはメッセージと行番号に従って落ち着いて修正することが上達の近道です。
今回の基礎を足場に、今後はクラス同士の関係や拡張へと理解を広げていきましょう。