Как инициализировать класс, который наследует интерфейс? - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь применить SOLID в своем коде. У меня есть меню с несколькими вариантами. В каждом меню есть несколько кнопок. Я делаю Interface для первых кнопок меню:

interface IConvertToPartListButton
{
    void ConvertToPartList();
}
class BtnConvertToPartList : IConvertToPartListButton
{
   void ConvertToPartList()
   {
        //Do something
   } 
}

После этого я реализую интерфейс, который inherits этих двух кнопок, которые я создал

interface IImportPartsButtons : IConvertToPartListButton,IDeleteIP
{
}

Так что для каждого меню я сделаю это. После этого я хочу унаследовать все кнопки меню:

interface IButton : IImportPartsButtons,SecondMenuButtons,ThirdMenuButtons
{
}

Когда я пытаюсь создать новый экземпляр класса BtnConverToPartList, это невозможно.

 public static IButton GetButton() => new BtnConvertToPartList();

Ошибка:

Cannot implicitly convert type 'MOSOSoftware.BtnConvertToPartList' to 'MOSOSoftware.IButton'.

Если я что-то делаю не так, пожалуйста, запишите это, я новичок в программировании и все еще учусь. Спасибо!

1 Ответ

1 голос
/ 15 января 2020

Вы делаете неправильное наследование. «BtnConvertToPartList» реализует «IConvertToPartListButton», но «IButton» не является «IConvertToPartListButton», пока вы не реализуете «IButton» для «IConvertToPartListButton». Пожалуйста, найдите измененный код ниже,

 interface IConvertToPartListButton : IButton
{
    void ConvertToPartList();
}


interface IImportPartsButtons : IConvertToPartListButton
{
}

interface IButton
{
}

class BtnConvertToPartList : IConvertToPartListButton
{
    public void ConvertToPartList()
    {
        //Do something
    }
}

и описание,

public static IButton GetButton() => new BtnConvertToPartList();

Теперь это должно работать, потому что BtnConvertToPartList также является IButton, потому что IButton является IConvertToPartListButton.

...