C # абстрактный класс не может создать экземпляр - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть абстрактный класс 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 голосов
/ 30 ноября 2018

Возможно, вы захотите просмотреть эту статью .

Короткая версия заключается в том, что целью абстрактного класса является определение чертежа того, что будет делать класс, и другихконкретные классы будут их реализовывать.Таким образом, вы знаете, что все типы AbstractClass будут иметь одно и то же определение, даже если им нужно различное поведение.

По определению вы не можете создавать их экземпляры - вам нужно определить класс, который наследует вашабстрактный базовый класс, а затем создать экземпляр этого.Вот почему 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

    }

}
0 голосов
/ 30 ноября 2018

Определение абстрактного класса, если это класс, экземпляр которого вы не можете создать.Это просто не сработает.Вы можете сделать класс неабстрактным, использовать его подкласс или другой класс.

...