他们最近问我的一个面试问题。
C#中的抽象类是什么? 抽象类 - 是一个无法实例化的类。可以包括抽象或实例方法,构造函数等。
实例方法可用于为继承此抽象类的所有派生类实现通用功能。
好的......现在的问题是为什么我们需要一个抽象类来实现常用功能。我可以在基类中使用相同的常用功能,让派生类可以访问基类方法。如果是这样的话,而不是有一个抽象类..我可以去基类?或者将通用功能放在抽象类中,让派生类可以访问这些方法吗?
如果我的基类可以解决常见功能的实现,那么为什么我们需要一个抽象类来实现常用功能?
需要帮助才能正确理解......
答案 0 :(得分:5)
抽象类是基类 - 但它是一个基类,通常有一些抽象成员。这允许您在抽象类中编写代码,调用那些抽象成员,但没有任何实现......然后强制从抽象类派生的具体类来实现这些成员。
拥有抽象类而不仅仅是一些成员抛出NotImplementException
的具体基类的好处是:
作为一个例子,前几天我在Json.NET中编写了一个扩展JsonConverter
的抽象类类。目的是使它成为我项目中任何结构转换器的基类 - 它将处理所有可空类型转换(并将空JSON反序列化为空值),将派生类释放到只是专注于特定类型的部分。看看它(NodaConverterBase
),看看它是否让事情更清楚。
答案 1 :(得分:1)
抽象类用作基类。有时您可能希望实现通用功能但不直接实例化基类类型的实例,因此您将使用抽象类。
答案 2 :(得分:0)
以这种方式看待它,如果你正在编写一个应用程序来跟踪动物园的动物,你会有猴子,大象,鳄鱼等课程...它们都是动物,所以你会让它们继承一个基类动物(因为它们都需要基本的功能,如吃,呼吸等......)。但是你永远不会有一只只是动物的动物,所以你会让动物抽象,因为你永远不需要它的实例。
答案 3 :(得分:0)
棘手的短语是
"partial implementation."
除了你在帖子中提到的内容之外,抽象类不必实现所有函数,子类必须实现未实现的函数或者自己声明为抽象。