C#プログラミングガイド publicの使い方|public、privateの違いの利用事例
- システム
エンジニア - publicの使い方を教えてください。
- プロジェクト
マネージャー - C#dでのpublicの実装例などを挙げて詳しく説明しますね。
C# publicとは?
この記事ではC#におけるpublic
の利用方法や簡単な事例について説明しています。C#を勉強し始めるとpublic
やprivate
の記述をよく見かけるようになりますので、基本をまずは理解しましょう。
C#のpublicの概要
C#のpublic
キーワードは、型と型のメンバーを示すアクセス修飾子です。 パブリック アクセスは、制限の無いアクセスレベルとする場合に利用します。 C#でpublic
を利用する場合には次の例のように型宣言の前に利用します。
C#は型宣言を厳密に定義できるプログラミング言語です。型宣言を行った変数を利用しながらプログラミングを行いますが、どこを外部に公開するかを決める必要がありますが、その際に利用するのがpublicなどのアクセス修飾子になります。
publicの基本的な実装例
すべての見出しに必ずテキスト(文章)を追加してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
01:class TestClass
02:{
03: public int x;
04: public int y;
05:
06: static void Main()
07: {
06: x = 10;
07: y = 15;
08: Console.WriteLine($"x = {x}, y = {y}");
09: }
10:}
|
C#のクラスとインスタンス
C#のpublic
を説明する前にクラスとインスタンスについて簡単に説明をします。オブジェクト指向のプログラミング言語においては基礎となる部分のため、知っているという方はおさらいとして読んでみてください。
オブジェクト指向のプログラミング言語ではクラスとオブジェクトが存在しています。まず、クラスとはこれから作成する製品の設計図(構造)を決めたものです。それに対してオブジェクトとはクラスの構造にしたがって作成されるものです。
生成されたオブジェクトは元の設計図のインスタンスと呼ばれています。後述のプログラムサンプルにおいてもクラスを定義しておき、new
(生成)することでインスタンスとなり、プログラム中で利用できるようになっています。
今回のpublic
とは、このインスタンスとして生成された製品が外部からどのように利用できるかを定義するものです。
C#で利用するpublicって何?
C#で利用するpublic
をアクセス修飾子と言います。これから「C#でプログラムを作成したい」と思っている方は、まず始めに目にする単語です。public
の他にも複数のアクセス修飾子がありますので、それぞれの特徴とアクセシビリティレベルを説明します。
C#では複数のアクセス修飾子をclass
や変数とセットで利用します。
C#のアクセス修飾子とは?
アクセス修飾子とはC#のプログラムの中のclass
や変数のアクセシビリティレベルを定義するために利用します。アクセシビリティレベルを定義することでカプセル化など外部から隠蔽することが出来るようになります。
C#のアクセス修飾子の種類
アクセス修飾子は全てのメンバーまたは型の宣言されたアクセシビリティを指定するときに利用されるキーワードです。アクセス修飾子の指定により、どの範囲まで有効であるかのアクセシビリティレベルを決定します。
public
:publicでは、同じプログラム内の他のコードや、そのプログラムを参照する別のプログラム内の任意のコードからアクセス可能です。private
:privateでは、同じclass
内または同じ構造体内のコードからのみアクセス可能です。protected
:protectedでは、同じクラス内か、そのクラスから派生したクラス内のコードからのみアクセス可能です。internal
:internalでは、同じプログラム内の任意のコードからアクセス可能ですが、別のプログラムからはアクセス不可です。protected internal
:protected internalでは、宣言されているプログラム内の任意のコードからアクセスできるほか、別のプログラムの派生クラス内からアクセス可能です。private protected
:private protectedでは、同じクラスのコードか、そのクラスから派生した型のコードによって、その宣言したプログラム内でのみ、アクセス可能です。
C#のアクセシビリティレベル
以下にメンバーに適用されるアクセシビリティレベルの宣言について説明をしています。まずは宣言によって有効となる範囲が変わることを理解した上で、使い分けを考えていくようにしてください。
しっかりと違いを理解することで可読性、再利用性の高いプログラムを作成することが出来ます。
public
:アクセスに制限はなく、利用は無制限です。private
:Container
である型にアクセスが限定されます。protected
:Container
であるクラスまたは派生した型にアクセスが限定されます。internal
:アクセスは現在のプログラム内に限定されます。protected internal
:現在のプログラム、またはContainer
であるクラスから派生した型にアクセスが限定されます。private protected
:現在のプログラム内のContainer
であるクラス、またはContainer
であるクラスから派生した型にアクセスが制限されます。
C#の実装事例(public)
ここではpublic
を利用した場合の事例を記載します。有効範囲を確認出来るように二つのクラスを作成し、その中でどのようにpublic
で宣言した変数が利用できるのかを説明しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
01:class PointTest
02:{
03: public int x;
04: public int y;
05:}
06:
07:class Program
08:{
09: static void Main()
10: {
11: var p = new PointTest();
12: // Direct access to public members.
13: p.x = 10;
14: p.y = 15;
15: Console.WriteLine($"x = {p.x}, y = {p.y}");
16: }
17:}
18:// 処理結果: x = 10, y = 15
|
public変数の例の解説
1行目のPointTestクラスの中でpublic変数xとy(3,4行目)を定義しています。その後、7行目にProgramクラスを定義しています。このプログラムではPointTestとProgramの2つのクラスを利用しています。
11行目にPointTestクラスのインスタンスを生成することでProgramクラス内で利用できる状態にしています。インスタンスを生成しましたので、PointTestクラス内で定義されている変数のx,yが利用できようになりました。このプログラムではxとyの和(合計)を求めるクラスになっています。
13行目、14行目でそれぞれxとyに値をセットしています。15行目ではxとyの合計を求め、コンソールに表示する処理を実装しています。
C#のpublicで指定した変数は別のクラスにおいて生成されると関数を通すことなく、直接的に値を変更する実装になっています。
C#の実装事例(private)※コンパイルエラー
ここではpublic
とはアクセシビリティレベルが異なるprivate
でコーディングした場合の事例を説明しています。
public
とprivate
を単純に入れ替えるだけでプログラムとしては利用できなくなります。この事例を通して、オブジェクト指向のプログラミング言語のイメージを掴んでもらいます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
01:class PointTest
02:{
03: private int x;
04: private int y;
05:}
06:
07:class Program
08:{
09: static void Main()
10: {
11: var p = new PointTest();
12: // Direct access to private members. ※コンパイルエラー
13: p.x = 10;
14: p.y = 15;
15: Console.WriteLine($"x = {p.x}, y = {p.y}");
16: }
17:}
18:// 処理結果: コンパイルエラーとなり、実行できません。
|
private変数の例の解説
1行目のPointTestクラスの中でpublic変数xとy(3,4行目)を定義しています。その後、7行目にProgramクラスを定義しています。このプログラムではPointTestとProgramの2つのクラスを利用しています。
11行目にPointTestクラスのインスタンスを生成することでProgramクラス内で利用できる状態にしています。インスタンスを生成しましたが、今回のプログラムでは変数x,yはprivate変数のためアクセスすることが出来ません。
そのため、13行目から15行目で直接アクセスしている部分がコンパイルエラーになります。
C#のprivateで指定した変数は別のクラスにおいて生成された場合、宣言したClass内にある関数からのみ変更が可能となります。
- システム
エンジニア - publicの使い方がわかりました。
- プロジェクト
マネージャー - publicの理解を深めて、実際にコードを書いてみましょう。
C#でのpublicのまとめ
C#はオブジェクト指向のプログラミング言語です。
オブジェクト指向プログラミングではカプセル化の原則があります。その場合に利用するのが今回紹介したpublic
などのアクセス修飾子です。アクセス修飾子を適切に利用することでカプセル化を実現することが出来、プログラムの可読性と再利用性が向上します。
そのため、public
は無制限に利用することが出来ますが、チームを組んで実装する際には利用箇所や利用方法を厳密に定義することが必要になります。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
C#新着案件New Job
-
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(新宿駅) -
システム開発/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(新宿駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円神奈川県横浜市(桜木町駅) -
デバック、テスト項目の作成/神奈川県横浜市/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円神奈川県横浜市(桜木町駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代前半の方活躍中/経験1年以上の方活躍中】/在宅勤務
月給29万~34万円東京都新宿区(西新宿駅) -
基幹システム開発導入/東京都新宿区/【WEB面談可/C#経験者/20代後半~40代の方活躍中/経験年数不問】/在宅勤務
月給41万~50万円東京都新宿区(西新宿駅)