Статические классы и интерфейс - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Есть вспомогательный статический класс:
Листинг программы
  1. public static class MyXmlSerializer
  2. {
  3. public static void Serialize()
  4. {
  5. //сигнатура и реализация методов в данном случае неважны
  6. }
  7. }
Внешний код использует его явно. Как избавиться от этой зависимости?
Листинг программы
  1. public class SomeObjectManager
  2. {
  3. public static void Save()
  4. {
  5. MyXmlSerializer.Serialize();
  6. }
  7. }
На ум приходит использование интерфейсов, но насколько я понимаю, статические классы и интерфейсы - вещи несовместимые. Вышел из ситуации, создав обертку над статическим классом
Листинг программы
  1. public interface ISerializer
  2. {
  3. void Serialize();
  4. }
  5. public class XmlSerializerWrapper : ISerializer
  6. {
  7. public void Serialize()
  8. {
  9. MyXmlSerializer.Serialize();
  10. }
  11. }
Ну и соответственно использование:
Листинг программы
  1. public class SomeObjectManager
  2. {
  3. private ISerializer serializer;
  4. public SomeObjectManager(ISerializer _serializer)
  5. {
  6. serializer = _serializer
  7. }
  8. public static void Save()
  9. {
  10. serializer.Serialize();
  11. }
  12. }
В чем недостатки такого подхода? Кроме очевидного усложнения инфраструктуры классов.

Решение задачи: «Статические классы и интерфейс»

textual
Листинг программы
  1. public class MyXmlSerializer : ISerializer
  2. {
  3.    private static readonly Lazy<MyXmlSerializer> _instance = new Lazy<MyXmlSerializer>(() => new MyXmlSerializer());
  4.    public static MyXmlSerializer Instance => _instance.Value;
  5.    
  6.    private MyXmlSerializer() { } // Закрытый конструктор
  7.  
  8.    public static void Serialize()
  9.    {
  10.  
  11.    }
  12. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы