继承权利

时间:2011-03-11 17:08:55

标签: c# inheritance business-objects

我上课了:

internal class Stage
{
    public long StageId { get; set; }
    public string StageName { get; set; }
    public int? Order { get; set; }

    public Stage()
    {
        Order = 0;
    }
}

我也有:

public class GroupStage : Stage
{
    private override long StageId { set { StageId = value; } }

    public GroupStage() : base() { }

    public void InsertStage(long groupId)
    {
    }

    public static void SetStageOrder(long stageId, int order)
    {
     ....
    }

    public static void DeleteStage(long stageId)
    {
     ....
    }

    public static GroupStage[] GetStages(long groupId)
    {
     ....
    }
}

public class TaskStage : Stage
{
    public DateTime? Time { get; set; }

    public TaskStage()
        : base()
    {
     ....
    }

    public static Stage GetNextTaskStage(Guid companyId, long taskId)
    {
     ....
    }

    public static Stage[] GetTaskStages(Guid companyId, long taskId)
    {
     ....
    }
}

这不起作用,我得到例外: 可访问性不一致:基类Stage的可访问性低于类GroupStage

我希望Stage类是私有的,除了GroupStageTaskStage之外没有访问权限。我还想在StageIdGroupStage中将TaskStage设为私有。 如果不重复Stage GroupStageTaskStage中{{1}}的成员,我怎么能这样做?

4 个答案:

答案 0 :(得分:4)

您不能使派生类比它的基类更易于访问。您可以做的是使TaskStage和GroupStage也是内部的,然后继承并公开公共接口,以便只有接口在程序集外部可见。

public interface IGroupStage
{
    public string StageName{ get; set; }
    ...
}

interal class GroupStage : IGroupStage
{
...
}

答案 1 :(得分:1)

您需要将Stage类设为public或protected。如果你把它抽象出来就不能在那个层面上实例化,所以如果它是公开的,你不必担心它被创建为基类

答案 2 :(得分:1)

将其设为protected而不是私有。如果你使它受到保护,你允许从它继承的类调用基类的方法,并继承基类成员。

答案 3 :(得分:1)

您可能真正想要的是Stage是一个抽象基类,因此无论其可访问性修饰符如何,都无法直接实例化。更改舞台的定义:

public abstract class Stage
{
    protected long StageId { get; set; }
    public string StageName { get; set; }
    public int? Order { get; set; }

    protected Stage()
    {
        Order = 0;
    }
}

protected modifier意味着派生类将能够访问该成员,但在这些类之外无法访问它。