0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C#の修飾子

Last updated at Posted at 2024-12-30

はじめに

感想まで書いてますがまだ理解不十分な点や自分で試せてない所もあるので今後新たな発見や気付きなどあれば徐々に更新していく予定です。

クラスにつけられるアクセスレベル

修飾子 意味 使いどころ
public 全公開 どこからでも参照したい時
internal 同一アセンブリ内でのみ参照可能 別のプロジェクトからは参照されたくない時

※キーワードなしのデフォルトのアクセスレベルはinternal

アクセスレベル以外のクラスにつけられる修飾子

修飾子 意味 使いどころ または使用した際に生まれる制約
abstract クラスを抽象クラスとして定義 直接インスタンス化できなくなる。
sealed クラスが継承できないことを定義 派生を防ぐことが出来る。
static クラスを静的クラスとして定義 インスタンス化できず、すべてのメンバーがstaticでなければならない。また、internal protected, protectedレベルのメンバーも持てなくなる。
partial クラス定義を複数のファイルに分割可能 自動生成コードと手動コードの分離だったり、複数人開発の際にコンフリクトの衝突を避けることが可能になる。一方で分割しすぎると管理が複雑になりやすいので注意
unsafe クラス内でポインタ操作が可能 ??
record クラスを不変データオブジェクトとして定義 主にデータ転送オブジェクトや簡潔なデータ型を定義したい時

メンバー(フィールド、メソッド)につけられるアクセスレベル

修飾子 同じクラス 継承関係なし(同じアセンブリ) 派生クラス(同じアセンブリ) 継承関係なし(異なるアセンブリ) 派生クラス(異なるアセンブリ)
public
internal protected ×
internal × ×
protected × ×
private protected × × ×
private × × × ×

※キーワードなしのデフォルトのアクセスレベルはフィールドもメソッドもprivate

アクセスレベル以外のメンバーにつけられる修飾子

メソッド

修飾子 意味 使いどころ または使用した際に生まれる制約
abstract 抽象メソッドを定義 実装を記述できなくなる。また、継承したクラスのどこかで実装を強制することが出来る。
new 継承元のメソッドを非表示 継承先の型でインスタンス化した場合はnewで新しく定義した方のメソッドが呼び出される。一方でポリモーフィズムを使ってインスタンス化した場合は継承元のメソッドが呼ばれる。
static メソッドを静的メソッドとして定義 インスタンスごとの処理ではなく、アプリケーション全体である処理がしたい場合。

感想

Javaも結構細かく制御できて良いと思ってたけどC#はJavaの後発という事もあって、より改良されてる気がしました。
一方でJavaのパッケージプライベートないのかーとは思ったけど
そもそもパッケージプライベートのレベルで制御したいならアセンブリ(プロジェクト)違うよね。ってのがC#の考えなんかな。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?