.net column
.NET開発者のためのブログメディア

【protectedなどの使い方】C#のアクセス修飾子を解説その2

2020年08月20日

前回の【internalの使い方】C#のアクセス修飾子を解説その1では、主にinternal修飾子について解説してきました。次はprotected修飾子など他のアクセス修飾子の使い方などを掘り下げていきます。
publicやprivateの使い方は理解できていても、protectedまで理解できていない方も多いかと思います。コーディングの幅を広げるためにも、ここで基本的なアクセス修飾子の使い方はマスターしましょう。

PG
アクセス修飾子は主に、public、private、internal、protectedに分かれると思いますが、どれも重要になってくるから覚えておかなければならないですよね?
PL
もちろん全部重要です!前回はinternalについて解説しましたが、今回は他のすべてのアクセス修飾子について使い方を解説します。

実行環境
・Visual Studio Community 2017

publicアクセス修飾子の使い方

C#で使うアクセス修飾子の代表格です。開発初心者の方がまず教わるのが、こちらのpublic修飾子だと思います。
publicはどこからでもアクセス可能な点が特徴として挙げられます。これは非常に便利です。どのアクセス修飾子を使う迷った場合には、publicを使えばプログラムは動作します。

しかし、開発する場合には便利ですが、修正する場合には作業が複雑になります。どこからでもアクセス可能なので、修正することでどこまで動作に影響するのかといった確認作業が必要です。そういったことも念頭に置いて、publicを使っての開発は行うべきだといえます。

以下のプログラムにて、TESTCLASS.dllを参照します。実行するプログラムです。

実行結果
public結果

protectedアクセス修飾子の使い方

publicやinternalが使いこなせれば、あとはprotectedもマスターしておきましょう。

protectedを理解する前に、前提知識として必要なのが「継承」です。C#で開発する場合、この継承はよく出てくる命令のひとつです。継承には親と子のような関係が発生し、継承元クラスを基底クラス(スーパークラス)、継承先のクラスを派生クラス(サブクラス)と呼ばれます。

基底クラス側のみで利用するならば、通常はprivateを使用します。派生クラスからの参照がある場合に、protectedを使用します。

以下のプログラムにて、TESTCLASS.dllを参照します。実行するプログラムです。

実行結果
protected結果

privateアクセス修飾子の使い方

publicの次に多く使われるのが、こちらのprivateアクセス修飾子です。アクセスできる度合いが自分のクラスだけなので制限が一番厳しい修飾子です。

外部から参照されないメソッドや変数などは基本的にはprivateを利用して開発を行います。また、何もアクセス修飾子を明記しなければ、privateが自動的に割り当てられます。

実行結果
private結果

private protectedアクセス修飾子の使い方

こちらはC#7.2以降から搭載されたアクセス修飾子です。上述のprotectedアクセス修飾子とほとんど同じで、継承の親子関係で使用されます。唯一違う点が、他のプロジェクト(≒アセンブリ)からはアクセスできないことです。

実行結果
private protected結果

PG
アクセス修飾子の使い方を理解できました。これは他の言語でも同じように必要になってくるのでしょうか?
PL
同じく.NET Frameworkで開発できるVB.NETでは、protected privateは使えませんし、internalはFriendに置き換わるなど多少の違いはあります。ですが意味は同じなので、ここで使い方をマスターすれば他の言語でも十分に活用できるでしょう。

アクセス修飾子は他の言語でも利用されている

クラスを使ってプログラミングを行うオブジェクト指向の言語では、JavaでもC++でもこのアクセス修飾子は出てきます。オブジェクト指向で開発を行う上では、publicやprivateだけに頼らずに、protected、internalも早めにマスターして、積極的に使い分けていきましょう。

>>>C#の案件を探すならFEnet .NET Navi


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

reccomended

Categories

Tags