DOBON.NET DOBON.NETプログラミング掲示板過去ログ

コンストラクタの前の動作。

環境/言語:[C# /.NET Framework2.0]
分類:[.NET]

2010/06/10(Thu) 20:29:10 編集(投稿者)

お世話になっております。

継承時に元のコンストラクタを呼ぶ場合や
複数のコンストラクタを呼ぶ場合、
「:base(引数)」や「:this(引数)」を付けることで
別のコンストラクタを呼び出しつつ他の処理も行えますが
「他の処理」は別のコンストラクタが呼び出された後の処理となります。

そこでコンストラクタを呼び出す前に
処理を行いたい場合の方法についてお尋ねします

自分では以下の方法を思い付いたのですがこれらの方法が
プログラミングの作法的に正しい物なのか判断出来ません。
ご教授よろしくお願いいたします。
また、他に方法がありましたらご教授お願い致します

1:引数でstaticメソッドを呼び出す
//Hogeクラスのコンストラクタ
public Hoge(int a ,bool flag):base(getstring(a ,flag))
{
//処理
}

//引数取得用のstaticメソッド
private static getstring(int value , bool flag)
{
if(flag)
{
return value.ToString();
}
else
{
return "Exception";
}
}

2:コンストラクタを呼び出さず専用の初期化staticメソッドを使う

Hoge obj = Hoge.ExConstructor(1 , true);

//Hogeクラスのコンストラクタ
private Hoge(string str):base(str)
{
//処理
}

//Hogeクラスのコンストラクタがわり
public static Hoge ExConstructor(int value , bool flag)
{
if(flag)
{
return new Hoge(value.ToString());
}
else
{
return new Hoge("Exception");
}
}
■No26925に返信(しらいわさんの記事)
コンストラクタが必要という事は、インスタンスを複数管理
することに意味があり、その初期化処理がコンストラクタ
に書かれるのです。
> そこでコンストラクタを呼び出す前に
> 処理を行いたい場合の方法についてお尋ねします
その状況がまず考えられません。

インスタンスごとの管理が必要なければ、クラス全部 static に
して、コンストラクタが必要ないのでは?という話になります。

当サイトのサンプルにもあるように、全く無い事もないですが
http://dobon.net/vb/dotnet/form/singleform.html
インスタンスそのものを管理するような目的です。

本当に共有化(モジュール化)するべき処理なのか、クラス設計
の時点で間違っていないか検討してください。
コンパイルが通るのですから、言語的には間違いではありませんが。
るしぇ 様

解答ありがとうございます。

>その状況がまず考えられません。
例えば、Exceptionクラスを継承して作ったクラスを呼び出して、
引数によってメッセージが変わる。と言うことをやりたかったのです。

Exception(Message)を引数によってそれぞれ返す
staticメソッドの方が良いですね。

その方向で作成しようと思います。
ありがとうございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板