C#抽象类无法创建实例

时间:2018-11-30 17:45:32

标签: c# abstract-class

我有一个抽象类ControllerBase,并且在公用文件夹中有一个公共密封类People。我想在密封的类中将此称为ShowSuccessMessage,但出现错误。

这是调用密封类的正确方法吗?

密封类:

    Controllers controller = new ControllerBase();
    controller.ShowSuccessMessage("Error");

ControllerBase

    public abstract class ControllerBase : Controller
    {       
[Dependency] 
        public Helper Helper { get; set; }
        public void ShowSuccessMessage(string message, bool session = false)
        {
            ShowAlertMessage(message, Messages.Success, session);
        }
    }

可以调用ShowSuccessMessage的不同控制器:

public class EditorController : ControllerBase

2 个答案:

答案 0 :(得分:4)

抽象类的定义(如果您不能创建其实例)。这只是行不通的。您可以使该类成为非抽象类,可以使用其子类,也可以使用其他类。

答案 1 :(得分:3)

You may want to look this article over

简短的版本是抽象类的目的是定义类将执行的操作的蓝图,其他具体类将实现它们。这样,您知道AbstractClass类型的所有内容都将具有相同的定义,即使它们需要不同的行为。

根据定义,您无法实例化它们-您需要定义一个继承您抽象基类的类,然后实例化THAT。这就是TemplateEditorController可以调用该方法的原因-它继承了抽象类,但本身不是抽象的。继续遵循这种模式。

// Cannot instantiate
public abstract class ClassOne
{

    public abstract void DoThing();

}


// can instantiate
public class ImplementationClassOne : ClassOne
{

    public abstract override void DoThing()
    {

    // insert code here

    }

}