1

このようなクラスがある場合:

public abstract class ActionBase
{
    public abstract bool RunRemote();
    public abstract void RunLocal();
    public void Run()
    {
        if (RunRemote())
        {
            var connection = new SQLiteConnection("Data Source=Data.db;Version=3;");
            connection.Open();

            var cmd = new SQLiteCommand("UPDATE Actions SET Complete = 1 WHERE Id = @Id", connection);
            cmd.Parameters.Add(new SQLiteParameter("@Id", Id));
            cmd.ExecuteNonQuery();
            cmd.Dispose();
            connection.Dispose();
        }
        RunLocal();
    }
}

私が望むのは、Run() を public としてのみ公開することですが、abstract および virtual を private としてマークすることはできません。これを行うためのクリーンな方法はありますか (たとえば、デリゲートを使用しないなど)

ありがとう、

ジョー

4

2 に答える 2

6

あなたがしたいprotected。これにより、基本クラスまたは派生クラスがメソッドにアクセスできるようになります。

protected abstract bool RunRemote();
protected abstract void RunLocal();
于 2013-10-07T21:34:22.457 に答える
2
    public abstract class ActionBase
    {
        protected abstract bool RunRemote();
        protected abstract void RunLocal();

        public void Run()
        {
            if (RunRemote())
            {
                // ....
            }
            RunLocal();
        }
    }

または何か。

于 2013-10-07T21:38:07.503 に答える