修饰符只允许从基类执行?

时间:2013-10-07 21:27:18

标签: c#

如果我有这样的课程:

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。是否有一种干净的方式(例如,不使用代表等)。

谢谢,

2 个答案:

答案 0 :(得分:6)

你想要protected。这将允许基类或派生类访问方法。

protected abstract bool RunRemote();
protected abstract void RunLocal();

答案 1 :(得分:2)

    public abstract class ActionBase
    {
        protected abstract bool RunRemote();
        protected abstract void RunLocal();

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

或其他什么。