Я использовал интерфейс и абстрактный класс и упускал из виду несколько вещей. Я всегда игнорировал несколько важных вещей, о которых я хотел бы узнать подробнее сейчас:
Итак, я понимаю, что абстракция - это процесс сокрытия ненужных функций от пользователя, мне интересно, когда я использую интерфейс, он обеспечивает абстракцию и скрывает ненужный код. Я хочу знать, кто является пользователем в приведенном ниже коде и где на самом деле происходит абстракция.
public class Program
{
public static void Main()
{
IFile file1 = new FileInfo();
FileInfo file2 = new FileInfo();
file1.ReadFile();
file1.WriteFile("content");
file2.ReadFile();
file2.WriteFile("content");
}
}
interface IFile
{
void ReadFile();
void WriteFile(string text);
}
class FileInfo : IFile
{
public void ReadFile()
{
Console.WriteLine("Reading File");
}
public void WriteFile(string text)
{
Console.WriteLine("Writing to file");
}
}
Пожалуйста, объясните мне, кто здесь пользователь и где происходит абстракция. У меня слабый мозг, когда дело доходит до понимания некоторых определений.




Метод Main в классе Program — это пользователь. Метод Main создает экземпляры интерфейса IFile и класса FileInfo и вызывает их методы.
Абстракция используется в коде через интерфейс IFile. Интерфейс абстрагируется от конкретных деталей реализации класса FileInfo. Пользователь (метод Main) взаимодействует с интерфейсом IFile, который предоставляет набор методов (а именно, ReadFile и WriteFile), определяющих желаемую функциональность. Пользователю не нужно знать о внутренней реализации класса FileInfo; им нужно знать только об абстракции, предоставляемой интерфейсом.
При использовании интерфейса абстракция достигается за счет сокрытия ненужных деталей кода и предоставления упрощенного интерфейса, ориентированного на желаемую функциональность. Пользователь может использовать методы ReadFile и WriteFile, не беспокоясь о том, как они реализованы в классе FileInfo.
Таким образом, пользователь — это метод Main, а абстракция происходит за счет использования интерфейса IFile, который скрывает детали реализации класса FileInfo и предоставляет упрощенный и согласованный интерфейс для работы с файлами.
Вот аналогия, которая может помочь вам понять абстракцию в этом контексте:
Представьте, что вы посетитель ресторана. Вам не нужно знать, как шеф-повар готовит вашу еду, чтобы наслаждаться ею. Вы просто заказываете еду из меню, а шеф-повар позаботится обо всем остальном. Шеф-повар — это деталь реализации, а меню — абстракция. Меню предоставляет вам упрощенный интерфейс, который позволяет вам заказывать еду, которую вы хотите, не беспокоясь о деталях того, как она готовится.
Точно так же интерфейс IFile предоставляет упрощенный интерфейс, который позволяет пользователю работать с файлами, не беспокоясь о деталях их реализации. Это достигается за счет абстракции.