C#のclassとは?初心者がつまずく書き方・使い方・インスタンス化をわかりやすく解説

はじめに

C#を学び始めると、早い段階で出てくるのがclassです。classはC#の基本でありながら、初心者にとっては「何を作っているのか」「なぜnewが必要なのか」「インスタンスとは何か」がわかりにくいポイントでもあります。

この記事では、C#のclassとは何かを初心者向けにわかりやすく解説します。classの書き方、使い方、インスタンス化、コンストラクタ、staticとの違い、よくあるエラーまで順番に見ていきます。

「csharp classを調べているけれど、用語が難しくて理解できない」という方でも、実際のコードを見ながら理解できる内容です。

1. C#のclassとは?初心者向けに意味をわかりやすく解説

1-1. classは「オブジェクトの設計図」を作るための仕組み

C#のclassは、オブジェクトを作るための設計図です。

たとえば「ユーザー」をプログラムで表したい場合、ユーザーには次のような情報や動きがあります。

  • 名前

  • 年齢

  • メールアドレス

  • 自己紹介する処理

  • ログインする処理

これらをひとまとめにして定義できるのがclassです。

C#
class User
{
public string Name { get; set; }
public int Age { get; set; }

public void Introduce()
{
Console.WriteLine($"私は{Name}です。{Age}歳です。");
}
}

このUserクラスは、まだ実際のユーザーそのものではありません。あくまで「ユーザーはこういう情報と処理を持つ」という設計図です。

1-2. クラス・オブジェクト・インスタンスの違い

初心者が混乱しやすいのが、クラス・オブジェクト・インスタンスの違いです。

クラスは設計図です。たとえばUserクラスは「ユーザーを作るための型」です。

オブジェクトは、クラスから作られた実体です。実際に名前や年齢を持つユーザーのデータがオブジェクトです。

インスタンスも、クラスから作られた実体を指します。C#では「インスタンスを作る」「オブジェクトを作る」という言い方は、ほぼ同じ意味で使われることが多いです。

C#
User user = new User();

このコードでは、Userクラスをもとにuserというインスタンスを作っています。

1-3. C#でclassを使う場面とメリット

C#でclassを使う主な目的は、関連するデータと処理をまとめて管理することです。

たとえば、ユーザー名だけを変数で管理するなら簡単です。

C#
string name = "田中";
int age = 25;

しかし、ユーザーが複数人になると管理が大変になります。

C#
string name1 = "田中";
int age1 = 25;

string name2 = "佐藤";
int age2 = 30;

このような場合にUserクラスを作ると、データを整理できます。

C#
User user1 = new User();
user1.Name = "田中";
user1.Age = 25;

User user2 = new User();
user2.Name = "佐藤";
user2.Age = 30;

classを使うメリットは、コードを読みやすくできること、再利用しやすくできること、変更に強い構造にできることです。

1-4. 初心者がclassでつまずきやすい理由

初心者がclassでつまずく理由は、目に見えない概念が多いからです。

特に次の点で混乱しやすくなります。

  • classは定義しただけでは使えない

  • newでインスタンス化する必要がある

  • クラス名と変数名の違いがわかりにくい

  • staticメソッドはnewなしで呼び出せる

  • publicprivateの意味がわかりにくい

最初はすべてを完璧に理解しようとしなくても問題ありません。まずは「classはデータと処理をまとめる設計図」「使うときはnewで実体を作る」と覚えるのがおすすめです。

2. C#のclassの基本構文と書き方

2-1. class宣言の基本形

C#でclassを書く基本形は次のとおりです。

C#
class クラス名
{
// フィールド
// プロパティ
// メソッド
}

たとえば、Personというクラスを作る場合は次のように書きます。

C#
class Person
{
}

これだけでもクラスとしては成立します。ただし、中身が何もないので、実際にはプロパティやメソッドを追加して使います。

2-2. クラス名の付け方と命名規則

C#のクラス名は、一般的にパスカルケースで書きます。パスカルケースとは、単語の先頭を大文字にする書き方です。

C#
class User
{
}

class ProductItem
{
}

class OrderHistory
{
}

クラス名は、そのクラスが何を表しているのかがわかる名前にしましょう。

悪い例です。

C#
class Data
{
}

class Test
{
}

よい例です。

C#
class User
{
}

class Product
{
}

class CustomerOrder
{
}

DataTestのような名前は意味が広すぎて、あとから見たときに何を表しているのかわかりにくくなります。

2-3. フィールド・プロパティ・メソッドの役割

classの中には、主にフィールド、プロパティ、メソッドを書きます。

フィールドは、クラスの中で使う変数です。

C#
private string name;

プロパティは、外部から値を取得したり設定したりするための仕組みです。

C#
public string Name { get; set; }

メソッドは、処理をまとめたものです。

C#
public void SayHello()
{
Console.WriteLine("こんにちは");
}

実際のclassでは、次のように組み合わせて使います。

C#
class Person
{
public string Name { get; set; }

public void SayHello()
{
Console.WriteLine($"こんにちは、{Name}です。");
}
}

2-4. public・privateなどアクセス修飾子の基本

アクセス修飾子は、そのクラスやメンバーをどこから使えるかを決めるキーワードです。

よく使うアクセス修飾子は次の2つです。

publicは、クラスの外から使えることを意味します。

C#
public string Name { get; set; }

privateは、そのクラスの中からしか使えないことを意味します。

C#
private int age;

たとえば次のように書くと、Nameは外から使えますが、passwordは外から直接使えません。

C#
class User
{
public string Name { get; set; }
private string password;
}

初心者のうちは、「外から使いたいものはpublic、クラス内部だけで使いたいものはprivate」と考えると理解しやすいです。

2-5. namespaceとファイル構成の考え方

C#では、クラスをnamespaceの中に書くことがあります。namespaceは、クラスを分類するための入れ物のようなものです。

C#
namespace SampleApp
{
class User
{
public string Name { get; set; }
}
}

最近のC#では、次のようにファイルスコープnamespaceを使う書き方もあります。

C#
namespace SampleApp;

class User
{
public string Name { get; set; }
}

基本的には、1つのクラスを1つのファイルに分けると管理しやすくなります。

たとえば、UserクラスならUser.csProductクラスならProduct.csというファイルにすると、あとから探しやすくなります。

3. C#のclassを使った簡単なサンプルコード

3-1. 最小構成のclassを書く例

最小構成のclassは次のように書けます。

C#
class Dog
{
}

この時点では、Dogという型を作っただけです。まだ名前や年齢などの情報はありません。

実際に使うには、次のようにインスタンス化します。

C#
Dog dog = new Dog();

3-2. プロパティを持つclassの例

次に、犬の名前と年齢を持つDogクラスを作ってみます。

C#
class Dog
{
public string Name { get; set; }
public int Age { get; set; }
}

このクラスを使うと、犬ごとに名前と年齢を設定できます。

C#
Dog dog = new Dog();
dog.Name = "ポチ";
dog.Age = 3;

Console.WriteLine(dog.Name);
Console.WriteLine(dog.Age);

3-3. メソッドを持つclassの例

classには、処理を表すメソッドも書けます。

C#
class Dog
{
public string Name { get; set; }
public int Age { get; set; }

public void Bark()
{
Console.WriteLine($"{Name}がワンと鳴きました。");
}
}

使う側のコードは次のようになります。

C#
Dog dog = new Dog();
dog.Name = "ポチ";
dog.Age = 3;

dog.Bark();

実行すると、次のように表示されます。

C#
ポチがワンと鳴きました。

3-4. classを別ファイルに分けて使う例

C#では、classを別ファイルに分けて書くことがよくあります。

たとえば、Dog.csに次のように書きます。

C#
namespace SampleApp;

public class Dog
{
public string Name { get; set; }
public int Age { get; set; }

public void Bark()
{
Console.WriteLine($"{Name}がワンと鳴きました。");
}
}

そして、Program.csで次のように使います。

C#
namespace SampleApp;

class Program
{
static void Main()
{
Dog dog = new Dog();
dog.Name = "ポチ";
dog.Age = 3;

dog.Bark();
}
}

同じnamespaceにある場合は、そのままクラス名で使えます。別のnamespaceにある場合は、usingを書いて読み込む必要があります。

3-5. サンプルコード全体の流れを初心者向けに解説

ここまでの流れを整理すると、次のようになります。

まず、Dogクラスを作ります。

C#
public class Dog
{
public string Name { get; set; }
public int Age { get; set; }

public void Bark()
{
Console.WriteLine($"{Name}がワンと鳴きました。");
}
}

この時点では「犬は名前と年齢を持ち、鳴くことができる」という設計図を作っただけです。

次に、new Dog()で実際の犬のインスタンスを作ります。

C#
Dog dog = new Dog();

そして、作ったインスタンスに値を設定します。

C#
dog.Name = "ポチ";
dog.Age = 3;

最後に、インスタンスのメソッドを呼び出します。

C#
dog.Bark();

classは「定義する」「インスタンス化する」「値を設定する」「メソッドを呼び出す」という流れで使うと理解しやすいです。

4. C#のclassをインスタンス化して使う方法

4-1. インスタンス化とは何か

インスタンス化とは、classという設計図から実際に使えるオブジェクトを作ることです。

たとえば、Userクラスは設計図です。

C#
class User
{
public string Name { get; set; }
}

このままでは、具体的なユーザーは存在しません。そこで、newを使ってインスタンスを作ります。

C#
User user = new User();

これで、userという実体が作られます。

4-2. newを使ったインスタンス生成の書き方

C#でclassをインスタンス化するには、基本的にnewを使います。

C#
User user = new User();

new User()は、「Userクラスをもとに新しいインスタンスを作る」という意味です。

複数のインスタンスを作ることもできます。

C#
User user1 = new User();
User user2 = new User();

user1user2は、同じUserクラスから作られていますが、別々のインスタンスです。

C#
user1.Name = "田中";
user2.Name = "佐藤";

Console.WriteLine(user1.Name);
Console.WriteLine(user2.Name);

それぞれ別の値を持てるのが、インスタンスの重要な特徴です。

4-3. クラス名 変数名 = new クラス名(); の意味

次のコードを分解して見てみましょう。

C#
User user = new User();

左側のUserは、変数の型です。つまり「この変数にはUser型のインスタンスを入れる」という意味です。

userは変数名です。この名前を使って、作ったインスタンスを操作します。

右側のnew User()は、実際に新しいUserインスタンスを作る処理です。

つまり全体としては、「User型の変数userを用意し、そこに新しく作ったUserインスタンスを入れる」という意味になります。

4-4. インスタンスからプロパティやメソッドを呼び出す方法

インスタンスからプロパティやメソッドを使うには、ドット.を使います。

C#
User user = new User();

user.Name = "田中";
Console.WriteLine(user.Name);

メソッドを呼び出す場合も同じです。

C#
user.SayHello();

例です。

C#
class User
{
public string Name { get; set; }

public void SayHello()
{
Console.WriteLine($"こんにちは、{Name}です。");
}
}
C#
User user = new User();
user.Name = "田中";
user.SayHello();

このように、インスタンスを作ったあとにインスタンス名.プロパティ名インスタンス名.メソッド名()で使います。

4-5. varを使ったインスタンス化の書き方

C#では、varを使って型名を省略することもできます。

C#
var user = new User();

これは次のコードとほぼ同じ意味です。

C#
User user = new User();

varは型がなくなるわけではありません。右側のnew User()から、コンパイラが「これはUser型だ」と判断してくれます。

初心者のうちは、最初は型名を書く方法で理解し、そのあとvarを使うとよいでしょう。

4-6. newしないと使えない理由

classは設計図なので、設計図だけでは実際のデータを持てません。

次のコードは、変数を宣言しただけでインスタンスを作っていません。

C#
User user;
user.Name = "田中";

このような書き方はエラーになります。userに実体が入っていないからです。

正しくは、次のようにnewでインスタンスを作ります。

C#
User user = new User();
user.Name = "田中";

classを使うときは、「まずnewで実体を作る」と覚えておきましょう。

5. コンストラクタでclassを初期化する方法

5-1. コンストラクタとは何か

コンストラクタとは、classをインスタンス化するときに自動で呼び出される特別なメソッドです。

主に、インスタンスを作ると同時に初期値を設定するために使います。

C#
class User
{
public string Name { get; set; }

public User()
{
Name = "未設定";
}
}

この例では、new User()したときにName"未設定"が入ります。

5-2. 引数なしコンストラクタの書き方

引数なしコンストラクタは次のように書きます。

C#
class User
{
public string Name { get; set; }

public User()
{
Name = "ゲスト";
}
}

使う側は次のようになります。

C#
User user = new User();

Console.WriteLine(user.Name);

この場合、Nameには最初から"ゲスト"が入っています。

5-3. 引数ありコンストラクタの書き方

引数ありコンストラクタを使うと、インスタンス化するときに値を渡せます。

C#
class User
{
public string Name { get; set; }

public User(string name)
{
Name = name;
}
}

使う側は次のようになります。

C#
User user = new User("田中");

Console.WriteLine(user.Name);

new User("田中")と書くことで、コンストラクタのname"田中"が渡されます。

5-4. インスタンス化と同時に値を設定する方法

コンストラクタを使うと、インスタンス化と同時に必要な値を設定できます。

C#
class Product
{
public string Name { get; set; }
public int Price { get; set; }

public Product(string name, int price)
{
Name = name;
Price = price;
}
}

使う側です。

C#
Product product = new Product("ノートPC", 120000);

Console.WriteLine(product.Name);
Console.WriteLine(product.Price);

コンストラクタを使うと、「インスタンスを作ったけれど値を設定し忘れた」というミスを減らせます。

5-5. コンストラクタで初心者が間違えやすいポイント

コンストラクタでよくある間違いは、戻り値を書いてしまうことです。

間違った例です。

C#
class User
{
public void User()
{
}
}

これはコンストラクタではなく、Userという名前のメソッドになってしまいます。

正しい例です。

C#
class User
{
public User()
{
}
}

コンストラクタにはvoidを書きません。

また、引数ありコンストラクタだけを定義すると、引数なしのnew User()は使えなくなります。

C#
class User
{
public string Name { get; set; }

public User(string name)
{
Name = name;
}
}

この場合、次のコードはエラーになります。

C#
User user = new User();

正しくは、引数を渡します。

C#
User user = new User("田中");

6. static class・staticメンバーとの違い

6-1. 通常のclassとstatic classの違い

通常のclassは、newでインスタンスを作って使います。

C#
User user = new User();

一方、static classはインスタンス化できません。

C#
static class MathHelper
{
public static int Add(int a, int b)
{
return a + b;
}
}

static classは、共通で使う処理をまとめるときに使われます。

6-2. staticメソッドはnewしなくても呼び出せる

staticメソッドは、インスタンスを作らずにクラス名から直接呼び出せます。

C#
int result = MathHelper.Add(3, 5);

Console.WriteLine(result);

通常のインスタンスメソッドは、次のようにnewしてから呼び出します。

C#
User user = new User();
user.SayHello();

staticメソッドは、次のようにクラス名から呼び出します。

C#
MathHelper.Add(3, 5);

6-3. インスタンスメンバーとstaticメンバーの使い分け

インスタンスごとに異なる値を持つものは、通常のプロパティやメソッドとして定義します。

C#
class User
{
public string Name { get; set; }

public void SayHello()
{
Console.WriteLine($"こんにちは、{Name}です。");
}
}

ユーザーごとに名前が違うため、Nameはインスタンスメンバーです。

一方、共通処理として使うものはstaticにできます。

C#
static class TaxCalculator
{
public static int AddTax(int price)
{
return (int)(price * 1.1);
}
}

税計算のように、特定のインスタンスの状態を持たなくてもよい処理はstaticに向いています。

6-4. 初心者が混乱しやすい「newなしで使えるコード」の正体

C#を学んでいると、Console.WriteLine()のようにnewなしで使えるコードが出てきます。

C#
Console.WriteLine("こんにちは");

これは、WriteLineがstaticメソッドだからです。

つまり、new Console()のようにインスタンスを作らなくても、クラス名から直接呼び出せます。

このようなコードを見ると「classはnewしなくても使えるのでは?」と思うかもしれません。しかし、通常のclassのインスタンスメンバーを使う場合は、基本的にnewが必要です。

6-5. staticを使いすぎないほうがよいケース

staticは便利ですが、使いすぎるとコードの変更やテストがしづらくなることがあります。

特に、ユーザー情報や商品情報のように、インスタンスごとに異なる状態を持つものは通常のclassとして作るのが基本です。

staticが向いているのは、状態を持たない共通処理です。

C#
static class StringHelper
{
public static bool IsEmpty(string text)
{
return string.IsNullOrEmpty(text);
}
}

初心者のうちは、「データを持つものは通常のclass」「共通処理だけならstatic」と考えると判断しやすいです。

7. C#のclassでよくあるエラーと対処法

7-1. 「型または名前空間の名前が見つかりません」の原因

「型または名前空間の名前が見つかりません」というエラーは、指定したクラスが見つからないときに発生します。

原因として多いのは次のようなケースです。

クラス名のスペルが間違っている場合です。

C#
User user = new Uesr();

UserUesrと書いてしまうと、C#はそのクラスを見つけられません。

namespaceが違う場合もあります。

C#
using SampleApp.Models;

別のnamespaceにあるclassを使う場合は、正しいusingを追加する必要があります。

7-2. 「オブジェクト参照がオブジェクト インスタンスに設定されていません」の原因

このエラーは、nullの変数に対してプロパティやメソッドを使おうとしたときに発生します。

C#
User user = null;
Console.WriteLine(user.Name);

userにはインスタンスが入っていないため、user.Nameを使おうとするとエラーになります。

正しくは、インスタンスを作ってから使います。

C#
User user = new User();
user.Name = "田中";

Console.WriteLine(user.Name);

このエラーは、C#初心者がclassを使うときに特につまずきやすいポイントです。

7-3. アクセス修飾子が原因で呼び出せない場合

privateなメンバーは、クラスの外から直接呼び出せません。

C#
class User
{
private string Name { get; set; }
}

この場合、次のようなコードはエラーになります。

C#
User user = new User();
user.Name = "田中";

外から使いたい場合は、publicにします。

C#
class User
{
public string Name { get; set; }
}

ただし、何でもpublicにすればよいわけではありません。外から使う必要があるものだけをpublicにしましょう。

7-4. クラス名とファイル名・namespaceの不一致

C#では、クラス名とファイル名が必ず一致していなくても動作します。しかし、管理しやすさのために、通常は一致させます。

C#
// User.cs
public class User
{
}

クラス名とファイル名がずれていると、あとから探しにくくなります。

また、namespaceが異なると、同じプロジェクト内でもクラスが見つからないことがあります。

C#
namespace SampleApp.Models;

public class User
{
}

このクラスを別のnamespaceから使う場合は、次のようにusingを追加します。

C#
using SampleApp.Models;

7-5. インスタンス化忘れによるエラー

classでよくあるミスが、インスタンス化を忘れることです。

間違った例です。

C#
User user;
user.Name = "田中";

userという変数はありますが、実体が作られていません。

正しい例です。

C#
User user = new User();
user.Name = "田中";

また、メソッドの戻り値がnullになるケースにも注意が必要です。

C#
User user = GetUser();
Console.WriteLine(user.Name);

GetUser()がnullを返す可能性がある場合は、nullチェックを入れると安全です。

C#
User user = GetUser();

if (user != null)
{
Console.WriteLine(user.Name);
}

8. classとstruct・record・interfaceの違い

8-1. classとstructの違い

classstructは、どちらもデータと処理をまとめられます。

大きな違いは、classが参照型、structが値型であることです。

classは、変数にオブジェクトへの参照を持ちます。

C#
User user1 = new User();
User user2 = user1;

この場合、user1user2は同じインスタンスを指します。

一方、structは値そのものをコピーするイメージです。

C#
struct Point
{
public int X { get; set; }
public int Y { get; set; }
}

初心者のうちは、まずclassを中心に覚えれば問題ありません。structは、座標やサイズのような小さな値を表すときに使われることが多いです。

8-2. classとrecordの違い

recordは、データを表すために便利な型です。

C#
record UserRecord(string Name, int Age);

recordは、値の比較や不変データを扱うときに便利です。

classは、データと処理をまとめて、状態を変更しながら使う場面に向いています。

C#
class User
{
public string Name { get; set; }
public int Age { get; set; }
}

初心者は、まずclassでオブジェクトの基本を理解し、その後にrecordを学ぶとよいでしょう。

8-3. classとinterfaceの違い

interfaceは、クラスが持つべきメソッドやプロパティのルールを定義するものです。

C#
interface ILogger
{
void Log(string message);
}

このinterfaceを実装するclassは、Logメソッドを持つ必要があります。

C#
class ConsoleLogger : ILogger
{
public void Log(string message)
{
Console.WriteLine(message);
}
}

classは実際の処理を書きます。一方、interfaceは「こういう機能を持つべき」という約束を定義します。

8-4. 初心者はまずclassをどう使えばよいか

初心者は、まずclassを使って身近なものを表す練習をするとよいです。

たとえば、次のようなものです。

  • User

  • Product

  • Book

  • Student

  • Order

これらは、名前や価格、年齢などのデータを持ちます。また、表示する、計算する、更新するなどの処理を持たせることもできます。

最初から設計を完璧にしようとせず、「関連するデータと処理を1つにまとめる」ことを意識しましょう。

8-5. 使い分けの簡単な判断基準

初心者向けに簡単に使い分けるなら、次のように考えるとよいです。

通常のデータと処理をまとめたいならclassを使います。

小さな値を表したいならstructを検討します。

データ中心で、値の比較を簡単にしたいならrecordを検討します。

ルールや共通機能の形だけを決めたいならinterfaceを使います。

ただし、最初に覚えるべき中心はclassです。C#の多くのコードはclassを基本に書かれているため、classを理解すると他の機能も学びやすくなります。

9. C#のclassを理解するための実践例

9-1. Userクラスを作る例

まずは、ユーザーを表すUserクラスを作ってみましょう。

C#
class User
{
public string Name { get; set; }
public int Age { get; set; }

public User(string name, int age)
{
Name = name;
Age = age;
}

public void ShowProfile()
{
Console.WriteLine($"名前: {Name}");
Console.WriteLine($"年齢: {Age}");
}
}

使う側です。

C#
User user = new User("田中", 25);
user.ShowProfile();

Userクラスには、名前と年齢というデータ、プロフィールを表示する処理があります。

9-2. Productクラスを作る例

次に、商品を表すProductクラスを作ります。

C#
class Product
{
public string Name { get; set; }
public int Price { get; set; }

public Product(string name, int price)
{
Name = name;
Price = price;
}

public int GetTaxIncludedPrice()
{
return (int)(Price * 1.1);
}
}

使う側です。

C#
Product product = new Product("キーボード", 5000);

Console.WriteLine(product.Name);
Console.WriteLine(product.GetTaxIncludedPrice());

価格計算のような処理をclass内にまとめることで、商品に関するコードを整理できます。

9-3. Listと組み合わせて複数のインスタンスを扱う例

classは、Listと組み合わせると複数のインスタンスを扱いやすくなります。

C#
List<User> users = new List<User>();

users.Add(new User("田中", 25));
users.Add(new User("佐藤", 30));
users.Add(new User("鈴木", 22));

繰り返し処理で全員の情報を表示できます。

C#
foreach (User user in users)
{
user.ShowProfile();
}

このように、classを使うと複数のデータをきれいに管理できます。

9-4. クラスを使ってコードを整理する例

classを使わない場合、すべての処理がMainメソッドに集まってしまうことがあります。

C#
string name = "田中";
int age = 25;

Console.WriteLine($"名前: {name}");
Console.WriteLine($"年齢: {age}");

小さいプログラムなら問題ありませんが、処理が増えると読みにくくなります。

classを使うと、ユーザーに関する情報と処理をUserクラスにまとめられます。

C#
User user = new User("田中", 25);
user.ShowProfile();

このように書けると、Mainメソッド側は「何をしているか」がわかりやすくなります。

9-5. 実務でよく使うclass設計の基本

実務では、classを使って役割ごとにコードを分けることが多いです。

たとえば、ユーザー情報を表すクラス、商品情報を表すクラス、注文処理を行うクラスなどです。

C#
class Order
{
public User User { get; set; }
public List<Product> Products { get; set; }

public Order(User user, List<Product> products)
{
User = user;
Products = products;
}

public int GetTotalPrice()
{
int total = 0;

foreach (Product product in Products)
{
total += product.GetTaxIncludedPrice();
}

return total;
}
}

実務で大切なのは、1つのclassに何でも詰め込みすぎないことです。

Userクラスはユーザーの情報、Productクラスは商品の情報、Orderクラスは注文の情報というように、役割を分けるとコードが読みやすくなります。

10. C#のclassに関するよくある質問

10-1. classは必ずpublicにする必要がある?

classは必ずpublicにする必要はありません。

同じプロジェクト内だけで使うクラスなら、publicを付けなくても使える場合があります。

C#
class User
{
}

ただし、別のプロジェクトから使いたいクラスや、外部に公開したいクラスにはpublicを付けます。

C#
public class User
{
}

初心者の学習用コードではpublic classとして書かれていることも多いですが、実際には使う範囲に応じて決めます。

10-2. classの中にclassは書ける?

C#では、classの中にclassを書くことができます。これをネストしたクラスと呼びます。

C#
class Outer
{
public class Inner
{
}
}

ただし、初心者のうちは無理に使う必要はありません。特別な理由がない場合は、クラスごとにファイルを分けたほうがわかりやすいです。

10-3. 1つのファイルに複数のclassを書いてもよい?

1つのファイルに複数のclassを書くことはできます。

C#
class User
{
}

class Product
{
}

ただし、実務では1つのファイルに1つの主要なclassを書くことが多いです。

UserクラスならUser.csProductクラスならProduct.csに分けると、コードを探しやすくなります。

10-4. classとメソッドは何が違う?

classは、データと処理をまとめる設計図です。

メソッドは、classの中などに書く処理のまとまりです。

C#
class User
{
public void SayHello()
{
Console.WriteLine("こんにちは");
}
}

この例では、Userがclassで、SayHelloがメソッドです。

classは「何を表すか」を定義し、メソッドは「何をするか」を定義します。

10-5. 初心者はclassをどこまで覚えればよい?

初心者は、まず次の内容を理解できれば十分です。

classは設計図であること。

newでインスタンスを作ること。

プロパティでデータを持てること。

メソッドで処理を持てること。

コンストラクタで初期化できること。

staticnewなしで使える特別なメンバーであること。

最初から継承、抽象クラス、interface、ジェネリックなどをすべて理解する必要はありません。まずは基本的なclassを書いて、インスタンス化して、値を設定し、メソッドを呼び出せるようになることを目指しましょう。

まとめ

C#のclassは、オブジェクトを作るための設計図です。データを表すプロパティや、処理を表すメソッドをまとめることで、コードを整理しやすくなります。

classを使う基本の流れは、まずクラスを定義し、newでインスタンス化し、プロパティやメソッドを呼び出すことです。

C#
User user = new User();
user.Name = "田中";
user.SayHello();

初心者が特につまずきやすいのは、classとインスタンスの違い、newの必要性、staticとの違いです。

通常のclassは、インスタンスごとに異なるデータを持つために使います。一方、staticは共通処理をクラス名から直接呼び出したい場合に使います。

C#のclassを理解すると、プログラムの構造を整理しやすくなり、より実践的なコードを書けるようになります。まずはUserProductのような身近な例からclassを作り、インスタンス化して使う練習をしてみましょう。