我是C#编程的新手。我理解,如果类包含任何抽象方法,则必须将其修改为抽象类,并且必须在类层次结构中的任何子类中提供其实现。 但我的问题是我们是否可以在没有任何抽象方法的情况下拥有抽象类(因此它不必是基类),如果是,那么具有什么意义呢?相同。请帮忙。 :)
答案 0 :(得分:4)
是的,您可以拥有abstract
基类,而无需任何抽象方法。好处是您无法创建此类的实例。
需要考虑用接口替换该抽象类。区别在于接口可能不包含任何实现,但在抽象类中,您可以为任何继承者可能使用的方法提供一些实现。
答案 1 :(得分:1)
你不能创建抽象类的实例,如果你不使用这个类作为基础 - 它是没用的(只有一些使用反射的棘手目标才有可能)
答案 2 :(得分:1)
是的,它可以使用而无需实现子类。基本上,你有三种“方法”来定义和调用方法:
以下简单的控制台应用程序提供了一个很好的,具体的(没有双关语)示例:
using System;
namespace ConsoleStuff
{
public abstract class MyAbstractClass
{
public abstract void DoSomethingAbs();
public void DoSomethingElse()
{
Console.WriteLine("Do something general...");
}
public static void TakeABreak()
{
Console.WriteLine("Take a break");
}
}
class MyImplementation : MyAbstractClass
{
public override void DoSomethingAbs()
{
Console.WriteLine("Do something Specific...");
}
}
class Program
{
static void Main(string[] args)
{
// Static method; no instance required
MyAbstractClass.TakeABreak();
var inst = new MyImplementation();
inst.DoSomethingAbs(); // Required implementation in subclass
inst.DoSomethingElse(); // Use method from the Abstract directly
Console.ReadKey();
}
}
}