- C#, C♯, C#相談室 Part85
588 :デフォルトの名無しさん[sage]:2014/12/06(土) 18:34:02.18 ID:T3VPTifq - C#を最近書いているのですがクラスの初期化の仕方がわかりません
1. 自動実装プロパティには初期値を設定する方法はないのでしょうか? コンストラクタ内で設定するしかないのでしょうか? 例) private int member{ private get; private set; } = 0 ←こんな雰囲気で書きたい 2. 抽象クラスをメンバに持つ場合、初期化はどのようにすればよいのでしょうか? 例) abstract class Base {} class Sub1 : public Base {} class Sub2 : public Base {} class Sample { private Base obj { private get; private set; } private Sample() { obj = new Base(); //←抽象クラスだからインスタンスは作れない } } どなたか教えていただけませんでしょうか
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
69 :デフォルトの名無しさん[sage]:2014/12/06(土) 18:44:37.04 ID:T3VPTifq - 例外について質問です
何種類かの例外クラスを投げうる関数を使うのに、tryブロックで囲みcatchしたあとの処理を共通化したいのですがどのように書けばいいですか? 今まではcatchをダラダラといくつか書いてたのですが、 catchしうる例外の種類が増えた時その関数を使う箇所全てのcatchを増やさないといけないことに気が付きました。 投げられる例外は必ずstd::exceptionを継承した例外クラスなので、とりあえずはstd::exceptionの参照でキャッチして、 受け取りうるエラークラスの型のオブジェクトを引数に取るようなポリモーフィックな関数で処理しようとしたのですがうまくいきません。 例外処理を共通化するにはどう実装すればよいですか?
|
- C#, C♯, C#相談室 Part85
592 :デフォルトの名無しさん[sage]:2014/12/06(土) 18:59:50.13 ID:T3VPTifq - >>589-590
そうなるとSampleがSubに依存してしまうのが嫌だったのですが、それしか方法はないのですね abstract class Base{} class ConcreatBase : Base {} class Sub1 : ConcreatBase {} みたいにして基底クラスを一旦具象クラスにすることにします ポインタがないのでなんか書きづらい…
|
- C#, C♯, C#相談室 Part85
593 :デフォルトの名無しさん[sage]:2014/12/06(土) 19:00:38.72 ID:T3VPTifq - >>591
ありがとうございます!ヌルオブジェクトパターンで調べてみます!
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
73 :デフォルトの名無しさん[sage]:2014/12/06(土) 19:01:49.08 ID:T3VPTifq - >>70
なるほど、確かに 解決しました、有難うございました
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
74 :デフォルトの名無しさん[sage]:2014/12/06(土) 19:03:38.43 ID:T3VPTifq - >>72
これでcatcherを派生クラスごとに書いたんですがうまくいかないということでしたが、 一回try catchする関数でラップすることで解決しました
|
- C#, C♯, C#相談室 Part85
595 :デフォルトの名無しさん[sage]:2014/12/06(土) 19:31:17.94 ID:T3VPTifq - >>594
もちろんそうするつもりだったのですが、Listを作りたかったのでデフォルトコンストラクタが必要で、 そのデフォルトコンストラクタの作り方に悩んだというのがきっかけでした
|
- C#, C♯, C#相談室 Part85
599 :デフォルトの名無しさん[sage]:2014/12/06(土) 20:00:19.13 ID:T3VPTifq - >>596
すみません、いま手元にPCがないので試せないのですが、C#ではデフォルトコンストラクタがないクラスの空の配列を作れるのでしょうか? List<MyClass> list; //MyClassのデフォルトコンストラクタがないとこの記述が許されないのでは >>598 何種類かの表現形式をもつ小さいクラス群をひとまとめに扱うコンテナクラスをListにつめたいです 例えば、氏名、電話番号、性別をもつ個人情報クラスを作りたい 氏名クラスは抽象クラスで、普通の氏名クラス、ミドルネーム付き氏名クラスみたいな具象クラスがある 電話番号や性別も同様 具体的な個人情報クラスはビルダーパターンとかアブストラクトファクトリーパターンで作る みたいなことがしたかったです
|