C# 从非抽象类派生抽象类
从非抽象类派生抽象类可以吗?或者这种方法有什么问题吗 这里有一个小例子:C# 从非抽象类派生抽象类,c#,.net,inheritance,abstract,C#,.net,Inheritance,Abstract,从非抽象类派生抽象类可以吗?或者这种方法有什么问题吗 这里有一个小例子: public class Task { // Some Members } public abstract class PeriodicalTask : Task { // Represents a base class for task that has to be done periodicaly. // Some additional Members } public class DailyTask
public class Task {
// Some Members
}
public abstract class PeriodicalTask : Task {
// Represents a base class for task that has to be done periodicaly.
// Some additional Members
}
public class DailyTask : PeriodicalTask {
// Represents a Task that has to be done daily.
// Some additional Members
}
public class WeeklyTask : PeriodicalTask {
// Represents a Task that has to be done weekly.
// Some additional Members
}
在上面的例子中,我不想让类任务抽象,因为我想直接实例化它。PeriodicalTask应该继承Task的功能并添加一些其他成员,但我不想直接实例化它。应该只实例化PeriodicalTask的派生类。在这里使用抽象不是正确的方法,例如,使用受保护的构造函数或内部构造函数。这将阻止直接创建PeriodicalTask的实例,但其派生类仍然可以访问它。没有问题 如果您查看像WinForms这样的大型层次结构,您将发现抽象类型的几个层次
MSBuild任务也是一个很好(而且更相关)的例子。我认为这种方法没有任何错误 您可能有一些可以用具体术语描述的基本类型。现在,仅仅因为这种类型的对象可以根据某些子类型进一步分类,并不意味着所有这些子类型都是具体的;反过来,它们可能需要进一步的混凝土化 现实世界的例子:
人
——具体(非抽象)兄弟姐妹:人
--摘要兄弟姐妹
--具体Sister:Sibling
--concrete这种事情一直在发生:所有抽象类都继承自System.Object
,一个本身不是抽象的类
new System.Object()
有时用于锁定,如果您周围没有其他东西,可以锁定。您能详细说明一下吗?是的,受保护/内部构造函数可以阻止创建PeriodicalTask
的实例。但它也需要从Task
中提取任何抽象方法/属性才能实现。。。我错过了那个不是抽象的任务。在这种情况下,两种方法都同样有效。除此之外,您不能强制某人在派生类中实现方法。@kprobst:是的,我可以这样做,但这样我就无法定义抽象成员,这些成员必须由派生类型实现。虚拟成员是没有选择的,因为派生类型必须定义它们的工作方式。我忽略了这一事实,因为继承自System.Object不能设置为显式。您还可以使用抽象方法重写具体(但虚拟)方法。示例公共抽象重写字符串ToString()
使用一个摘要覆盖来自System.Object
的具体ToString()
。这迫使所有派生类提供一个新的实现!