C#で押さえておきたい重要キーワード5選|sealed・params・internal・this・abstractの使い方を解説
C#には、クラス設計やメソッド定義の柔軟性を高めるために欠かせないキーワードが数多く存在します。本記事では、その中でも特に重要な以下の5つのキーワードについて、それぞれの役割と使い方をコード例とともにわかりやすく解説します。
- sealed(継承やオーバーライドの禁止)
- params(可変長引数)
- internal(アセンブリ内アクセス修飾子)
- this(現在のインスタンス参照)
- abstract(抽象クラス・抽象メンバー)
sealed:オーバーライドや継承を禁止する
sealedは、メソッドやクラスに対して「それ以上の拡張を禁止する」ための修飾子です。メソッドに付与した場合、そのメソッドは派生クラスでオーバーライドできなくなります。なお、sealedメソッドを使用できるのは必ず派生クラス内であり、かつoverrideされたメソッドである必要があります。
class Base
{
public virtual void Show() => Console.WriteLine("Base");
}
class Derived : Base
{
public sealed override void Show() => Console.WriteLine("Derived");
}また、クラス自体にsealedを付けると、そのクラスは継承できなくなります。セキュリティ上の理由や、意図しない拡張を防ぎたい場合に有効です。
params:可変個の引数を受け取る
メソッドを宣言する際に、渡される引数の数が事前に確定していない場合は、paramsキーワードが便利です。paramsを使うと、可変長の配列として引数を受け取れるようになります。
static int Sum(params int[] numbers)
{
int total = 0;
foreach (int n in numbers) total += n;
return total;
}
// 呼び出し例
Sum(1, 2, 3); // 6
Sum(10, 20, 30, 40); // 100
Sum(); // 0(引数なしでも呼び出し可能)paramsパラメータはメソッドの引数リストの最後に1つだけ指定できる点に注意してください。
internal:同一アセンブリ内でのみ公開する
internalはアクセス修飾子の一つで、クラスのメンバー変数やメソッドを「同じアセンブリ(プロジェクト)内」に限定して公開します。つまり、internalが付いたメンバーには、そのメンバーが定義されているアプリケーション(アセンブリ)内の任意のクラスやメソッドからアクセスできますが、外部アセンブリからは参照できません。
ライブラリ開発などで、外部には公開したくない内部実装を隠蔽したい場合に広く使われる修飾子です。
this:現在のインスタンスを参照する
C#におけるthisキーワードは、現在処理中のクラスのインスタンス自身を参照するために使用されます。特に、メソッドのパラメーター名とクラスのフィールド名が同じ場合に、両者を区別する目的でもよく使われます。
class Person
{
private string name;
public Person(string name)
{
// パラメーターとフィールドを区別するために this を使用
this.name = name;
}
}このようにthis.nameと書くことで、「このインスタンスのフィールドname」であることを明示できます。
abstract:抽象クラスと抽象メンバーを定義する
abstractキーワードは、抽象クラスや抽象メソッドを定義するために使用します。C#の抽象クラスには、実装を持つ通常のメソッド(非抽象メソッド)と、実装を持たない抽象メソッドの両方を含めることができます。
重要なポイントとして、抽象クラスは直接インスタンス化することができません。必ず派生クラスを作成し、抽象メンバーを実装したうえで利用します。
abstract class Animal
{
public abstract void Speak(); // 抽象メソッド(実装なし)
public void Sleep() // 非抽象メソッド(実装あり)
{
Console.WriteLine("眠ります");
}
}
class Dog : Animal
{
public override void Speak() => Console.WriteLine("ワン!");
}まとめ
C#のsealed、params、internal、this、abstractは、いずれもオブジェクト指向プログラミングにおいて頻繁に登場する重要なキーワードです。それぞれの役割を正しく理解し使い分けることで、安全性が高く保守しやすいコードを書けるようになります。ぜひ実際のコーディングで活用してみてください。
-
C#のvirtual・sealed・new・abstractキーワードの違いを徹底解説
はじめにC#には、継承やポリモーフィズムに関わる重要なキーワードとして「virtual」「sealed」「new」「abstract」があります。それぞれ役割が大きく異なるため、正しく理解して使い分けることが、保守性の高いコードを書くための第一歩となります。この記事では、各キーワードの特徴と使い方をコード例とともに解説します。virtual:メソッドのオーバーライドを許可するvirtual キーワードを付けたメソッドは、派生クラスでのオーバーライド(上書き)が可能になります。親クラスのメソッドを子クラスで再定義したい場合は、親クラス側のメソッドを virtual として宣言しておく必要がありま
-
Javaの抽象クラスと抽象メソッドの基本と実装例
はい、Javaでは抽象クラスや抽象メソッドを簡単に作成することができます。本記事では、abstractキーワードを使った抽象クラスの定義方法と、その基本的な構造について具体例を交えて解説します。抽象クラスとは抽象クラス(abstract class)は、その名の通り「抽象的」な概念を表すためのクラスで、直接インスタンス化することはできません。共通の属性や振る舞いをサブクラスに継承させるための設計図として活用されます。抽象クラスを作成する方法は非常にシンプルで、クラス宣言時に class キーワードの前に abstract キーワードを付けるだけです。コード例/* ファイル名 : Employe