我上课了:
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
类是私有的,除了GroupStage
和TaskStage
之外没有访问权限。我还想在StageId
和GroupStage
中将TaskStage
设为私有。
如果不重复Stage
GroupStage
和TaskStage
中{{1}}的成员,我怎么能这样做?
答案 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意味着派生类将能够访问该成员,但在这些类之外无法访问它。