C#で定数クラスをシングルトンで作るという話が上がったのですが、シングルトンがよく分かっていません。
定数クラスをシングルトンって意味あるの?という質問になります。
自分としては、定数でgetは入れられない認識なので、定数ごとにget関数をそれぞれに作らないといけなくなる想定でいます。
例)
public class constant{
private const long value = 100;
public getValue(){ return value; }
private static constant instance = new constant();
public static constant GetInstace() => instance;
}
使い方としては
①GetInstance
②getValue
になる認識。
ただ、定数なら値の変化もないですし、何をしにシングルトンなのかが分かりません。
Get作るのも手間ですし。
クラス構成はシングルトンにして、定数もpublicにして「クラス名.定数名」でとればいいじゃないか、と言った人も居たのですが、それだと何しにシングルトンなの?と思っています。
「クラス名.定数名」でもコンストラクタ通るから、これでシングルトンにする意味あるだろ的なことも言われました。
結局、何を聞きたいかと言いますと、定数用クラスでシングルトンって何か意味あるの?って話になります。
No.2ベストアンサー
- 回答日時:
これだけだと完全にシングルトンは無駄ですよね。
シングルトンの使い方を履き違えてます。
シングルトンは定数を扱うためのものではなく、オブジェクトをどんなタイミングでいくつ使っても同じオブジェクトを入手できて操作できることに意味を持ちます。
これだけのものなら、スタティッククラスにすればいいだけです。
回答ありがとうございます。
同じことを考えていました。
やはりただただ固定値取りたいだけなら、シングルトンにする必要はないですよね。
励みになりました。
進言してみようと思います。
No.7
- 回答日時:
ひょっとしてこっちの話かな。
例えば、音符(音程+長さ)を現すimmutableなクラスが
有るとすると、楽譜を作るのにラの四分音符のインスタンスはー個で充分です。
つまりシングルトン=定数オブジェクト
#普通の意味のシングルトンではなく
#同一状態(定数状態)のインタンスを1個に制限する。
ならば、publicなコンストラクタを提供せず、
音程と長さをパラメータにとりシングルトンを返す
ファクトリメソッドを作れば、音符の使うメモリが激減します。
というような話ではない???
No.5
- 回答日時:
意味ないです。
私の知る範囲で定数保持用のクラスをシングルトンにしているプロジェクトは
皆無ですね。
c#では static readonly 型フィールドを使うのが一般的。
回答ありがとうございます。
励みになりました。
打ち合わせで進言してみます。
※文字や数値の、実行時の状態依存な訳ではなく、完全固定値予定になるため、速度的に優秀と噂のconstで定数は作る予定です。
No.3
- 回答日時:
No.1です。
えっと。。。(^^;
恐らくメンバー全員がC#での製造・試験は出来るが、オブジェクト指向の本質的な部分をしっかり学ばれたことがないのだと思います。
Getを作るのが面倒だし、、、といった問題ではないのですが。。。(^^;
C言語の外部変数的な見方で進めては。。。
その理解でも「動くもの」、「保守・改良開発出来るもの」は出来ます。
はい。
再回答ありがとうございます。
Getを作る手間とかはほんと面倒くせーをボソッと言った感じでした。
わざわざシングルトンにする有用性とステップ数、工数の観点から、何ゆえシングルトン?といったところです。
No.1
- 回答日時:
定数をまとめたクラスだからこそシングルトン(インスタンスを1つだけ)とする意味があるかと。
。。複数あることに意味がない物はまさにシングルトンにすると「無駄」を省けます。
いえ、私としては、なぜインスタンス作成を要するシングルトンなのかがネックになっています。
定数で不変値なのですから、グローバルでいいじゃないか、が率直な気持ちです。
そのあたりを含め、果たしてシングルトンを通すことの有用性が解りかねる、といった質問になります。
可変の変数を同インスタンスで共有したい、などでしたらシングルトンも分かるんですけども。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java java final 1 2022/06/10 22:49
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FriendとPublicの違い。。。
-
ダイアログ表示時にチェックボ...
-
C++ protectedにアクセス不可
-
MFCのドラッグ&ドロップについて
-
(UWSC) 「#32770」の意味わかり...
-
MFCアプリのコマンドラインでパ...
-
イベントにAddHandlerされてい...
-
WindowsAPIのリストビューの...
-
既定のコンストラクタがない?
-
DataGridViewのセルに斜線を引...
-
エディットコントロールでEnter...
-
DebugクラスとTraceクラスの違い
-
C++/CLIからC++の呼び出しで例外
-
クラスのアドレスを引数として...
-
OnInitDialog()の関数の組み込み方
-
オーバーライド関数の呼び出し...
-
C++では構造体がメンバ関数をも...
-
C++のMFCを使っています。
-
[MFC] CWnd::MessageBoxの警告...
-
【C++】相互参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
エディットコントロールのイベ...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
ダイアログクラスのコントロー...
-
C++ protectedにアクセス不可
-
DebugクラスとTraceクラスの違い
-
DataGridViewのセルに斜線を引...
-
【ASP.NET】 独自で作成したク...
-
このコンパイルエラーの意味に...
-
継承を重ねた場合のコストはど...
-
エディットコントロールでEnter...
-
ボタンのオーナードローについて
-
C#で通常のbuttonコントロール...
-
MFCのCListCtrlでスクロールを検出
-
【C++】相互参照
-
SetTimerの行でアサートエラー...
おすすめ情報