QA@IT

関数内で必ず呼び出さなければならない関数

3388 PV

C#で子クラスを作成するときに少し悩んでいることがあります。

親クラスの関数で抽象クラス
例:private abstract void Make()
を作成して、子クラスでMake関数を作成する際、必ず呼び出さないといけない関数があります。
例:private override void Make()
・・{
・・・ Clear();//必ず呼び出す関数
・・・//子クラス特有の処理
・・・Bind();//必ず呼び出す関数
・・}
子クラスでMake()クラスを作成したときにはこのClear()と、Bind()を必ず呼び出さないといけません。
しかし、上記の例の場合、ClearとBindの関数宣言は暗黙的に必須な要件となっています。

このClearとBindを必ず呼び出すようにできる処理の書き換え方や、
記述されていない場合、エラーを表示する方法、また、明示的に関数の呼び出しが必要だということを伝える方法
などがあればご教授お願いしたいです。

回答

こんにちは。

ClearとBindは親クラスに実装されているのでしょうか。
で、MakeはAbstractなんですよね。であれば

abstract class 親クラス
{
    public void Make()
    {
        Clear();
        子クラス特有の処理();
        Bind();
    }

    private void Clear()
    {
        //hoge
    }

    protected abstract void 子クラス特有の処理();

    private void Bind()
    {
        //hoge
    }
}

class 子クラス : 親クラス
{
    protected override void 子クラス特有の処理()
    {
        //hoge
    }
}

で良いのでは。

編集 履歴 (0)
  • こんにちわ
    ClearとBindは親クラスで定義ずみです。

    抽象メソッドを親クラスで呼び出すという発想がでてきませんでした。

    ありがとうございます。
    プログラムに組み込んでみます!
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。