【发布时间】:2011-07-13 15:47:08
【问题描述】:
我有课:
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 中成为私有的。
我怎样才能做到这一点而不在GroupStage 和TaskStage 中重复Stage 的成员?
【问题讨论】:
-
“正确继承” .. 好的,那么您的行为在哪里?
-
对不起,我不明白你的问题。
-
您在问如何正确地进行继承,但您的类没有任何行为(除了一些静态 CRUD/ActiveRecord)。如果您想“正确地进行继承”,您的设计将围绕您的类中的行为,而不是属性包。换句话说,我是说你做错了。大错特错。
-
您似乎只是为了使用继承而使用继承。当我看到您的基类只包含基本属性时,这是严重的代码臭味。在您使用的示例中没有继承意义。然后是所有的静态方法......另一种代码味道。而且您似乎对可访问性级别过于关注。我并不是要贬低,因为您似乎对 OO 有点陌生,但您似乎在设计上犯了一些相当严重的错误。
-
你怎么可以让派生类(StageId)中的属性更难访问?有人愿意解释吗?会很感激的。
标签: c# inheritance business-objects