C#

C#でのアクセシビリティ

C#にはアクセシビリティというものがあり
private
internal
publicなどがあります。
そのほかには
protected
protected internalがあります。

 

 

publicであれば同一アセンブリと
そのアセンブリを参照しているアセンブリから参照できます
(要するにすべて)

privateはそのクラスのみ
internalは同一アセンブリのみ
protectedは同一クラスと派生クラスからのみ参照可能
protected internalはprotectedとinternalの両方の効果があります。
プログラミングに慣れていない方は
一見publicを使えばどこからでも参照できて
全部これでもいいように思います。

しかし全くそういう事はありません。

このアクセシビリティをうまく使わないと
とても分かりにくい,改造しにくい,
ダメダメなプログラムが出来上がります。

そういう私も昔はそんなダメダメな
プログラムを書いていました。

では,なぜだめなのか,一緒に考えていきましょう。

例えばWindowsフォーム画面を作って
そこにボタンを一つ置いたとします。

C#のデザイン画面を見てみましょう。

private System.Windows.Forms.Button button1;

こんな感じでボタンが宣言されています。
これがもし

public System.Windows.Forms.Button button1;

だったらどうですか?
違いはボタンのアクセシビリティだけです。
publicに変更しました。

この瞬間からこのボタンがあるプロジェクト内とこのプロジェクトを参照する
すべてのコードでこのボタンの値を変更できるようになりました。

これってすごく怖いですよね。

このプログラムをリリースした後にもし
このボタンに対して何か修正を加えるたびに
どこに影響するかを調べる必要がありますが,
どこからでも値を変更できる時点で
ものすごい量のコードをチェックしないと
いけなくなります。

要するにアクセシビリティというのは非常に大切で
publicにすればどこからでも見られて便利な気もしますが
とても見通しの悪いプログラムになってしまいます。

アクセシビリティはできるだけ
外から見えないほうがいいです。
とはいえ,クラスなどはprivateのクラスでは
誰も使えないクラスになってしまい意味がありません。
C#でもクラスを作成したらデフォルトはinternalになっています
(アクセス修飾子を省略するとC#では変数はprivate,
クラスはinternalになります)
なので,魅せる必要のある最小のアクセシビリティにしましょう。
その上で,必要になった時にpublicに昇格させるという
設計がよいかと思います。

簡単ですがアクセシビリティに関しては以上です。
最後までお読みいただきありがとうございました。

トップページへ戻る

BlazorでのWebアプリケーション開発手法2【C#】

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る

A01_はじめに
B01_メッセージを出すレイアウトの作成
B02_pタグを使ったメッセージ表示
B03_ポップアップメッセージを表示する方法
B04_問い合わせメッセージを表示する方法
B05_ユーザーの入力を受けるメッセージ
B06_インラインJavaScript非推奨
B07_Javascriptを分離してアクセスする方法
B08_MessageServiceを作成する
B09_自作Serviceの依存性注入をする方法
C01_EditFormを使った入力検証
C02_ValidationSummary
C03_ValidationMessage
C04_入力コンポーネント_InputText
C05_InputNumber
C06_未入力を許容する方法
C07_InputNumberで対応している型
C08_InputDate
C09_InputSelect
C10_入力コンポーネント_InputCheckbox
C11_InputRadioとInputRadioGroup
C12_InputTextArea
C13_InputFile
C14_ファイルの上限を設定する
C15_フォーカスをあてる方法_標準編_ElementReference
C16_フォーカスをあてる方法_Razorコンポーネント編
D01_StringLength
D02_RegularExpression_正規表現
D03_EmailAddress
D04_Compare
D05_ViewModelに分ける方法
D06_依存性注入を利用したViewModelの生成
D07_CustomValidation1
D08_CustomValidation2
D09_プロパティレベルのCustomValidation
D10_ValidationContext
D11_処理をViewModelに移す書き方
D12_ViewModelに移せないロジック
D14_ShouldRender
D15_ViewModelに書かないほうがいいもの
D16_エラー箇所にフォーカスを当てる方法
E01_Azureにデプロイするための事前作業
E02_Azureにアップするアプリの作成
E03_Azureへの公開準備
E04_Azureへの公開
E05_データベースの作成
E06_データベースのデータを取得する
E07_データベースの値を画面に表示する
E08_Azureのデータベースを作成する
E09_Azureのデータベースにポータルサイトからログインする
E10_AzureのDBにテーブルを作成する
E11_BlazorアプリからAzureDBに接続する
E12_SQLデータベース料金の注意
E13_AzureSQLデータベースの無料オファーを受ける
F01_依存性注入のライフサイクル
F02_クラウドでのAddSingletonの動き

■非公開コース「C#14新機能」プレゼント:
非公開コース「C#14新機能」(80分)をご覧になりたい方は
こちらからURLとパスワードを発行していますので、ご覧になってみてください。
非公開コース「C#14新機能」を観る