Я начинаю учиться создавать C# и использовать интерфейс и класс. Может ли кто-нибудь научить меня, как отделить мой класс от моего интерфейса и при этом поддерживать связь друг с другом?
Причина: если я буду обновлять свой код, я буду знать, где их добавить, и на моем экране будет меньше кода.
namespace Car
{
class MainClass
{
//My Interface
interface ICar
{
int gas { get; set; }
//void refuel();
int getGasLeft();
}
//My Class
class Car : ICar
{
public int gas { get; set; }
public Car(string _name)
{
name = _name;
dist = 0;
gas = 40;
}
public void refuel(int lit)
{
gas += lit;
}
public int getGasLeft()
{
return gas;
}
}
//Main
public static void Main(string[] args)
{
Car toyota = new Car();
toyota.drive(100);
toyota.refuel(5);
Console.WriteLine("Name: " + toyota.name +
"\nGas Left: " + toyota.getGasLeft());
Console.ReadLine();
}
}
}





Вам нужно узнать об общедоступных, частных, защищенных пространствах имен и т. д.
В вашем случае создайте новый файл с именем ICar.cs в той же папке и объявите его как общедоступный интерфейс в том же пространстве имен.
В C# пространство имен - это способ подключения файлов из разных мест.
Например, вы можете создать папку Interfaces и поместить туда свой ICar. Я покажу вам пример из своего проекта.
Моя структура папок выглядит так:
В моем ViewModel.cs я использую объект с именем FakeData. Как вы можете видеть ниже, класс FakeData находится в пространстве имен TaskManager.Models.
Теперь мы переходим к нашему проекту и смотрим на папку Models.
В C#, когда вы создаете папку и класс в ней, вы получите namespace на основе имени вашей папки. Конечно, вы можете это изменить. Вы можете редактировать пространство имен, как хотите.
В вашем случае вы можете просто создать папку с именем Interfaces. Щелкните правой кнопкой мыши, затем выберите «Новый класс» и дайте ему имя, например, Icar.cs. Вставьте туда свой код. Ваше пространство имен по умолчанию будет ProjectName.Interfaces. Сделайте свой интерфейс public. Затем вы можете вызвать свой интерфейс, добавив using ProjectName.Interfaces в начало вашего основного класса. Тогда вы можете сделать Main : ICar без ошибок.
Та же идея с классом Car. Вы можете создать папку с именем Models и класс в ней с именем Cars.cs. У него будет пространство имен ProjectName.Models. Если вы хотите использовать свой интерфейс, который находится в папке Interfaces, вам необходимо добавить пространство имен в свой класс Car.cs. В вашем случае это будет выглядеть как using ProjectName.Interfaces. Затем вы можете вызвать интерфейс в Car.cs без каких-либо ошибок.
Не стесняйтесь задавать мне любые вопросы по этому поводу. Я постараюсь вам помочь.
Ого, это действительно хорошо детализированный @michasauces. Можете ли вы критиковать мой класс и увидеть его уязвимость? Причина этой идеи заключается в том, чтобы я лучше понимал, как main не должен знать, как вещи выполняются в back-end.
Я посмотрю на это через несколько часов, потому что сейчас у меня мало времени.
Если мой ответ согласуется с вашим вопросом, не могли бы вы утвердить его, отметив его?
Конечно! Сделанный. Тогда буду ждать вашего ответа :) Спасибо
Вам не нужны папки, о которых я упоминал ранее, но это поможет в навигации, и это хорошая практика. Когда вы создаете файл .cs в каталоге проекта (щелкните правой кнопкой мыши проект, а затем просто добавьте новый элемент), файлы .cs будут иметь такое же пространство имен, например ProjectName. Таким образом, вам не нужно использовать using namespace в своем классе, потому что файлы видят друг друга в одном пространстве имен. Если Car и Main будут в одном пространстве имен, вам не нужно использовать using. Просто вызовите объект из этого класса, и все будет в порядке
@Maku, если вы хотите попросить обзор кода, перейдите на codereview.stackexchange.com
Да, это тоже то, что я тестирую @DaeMoohn, я уже добавил два файла, разделяющих основной, класс и интерфейс. Кстати, можете ли вы критиковать то, как я использую уровни защиты, и есть ли способ для главного никогда не знать, как все было сделано внутри класса?