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

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

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

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

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

textual
Листинг программы
public class MyXmlSerializer : ISerializer
{
   private static readonly Lazy<MyXmlSerializer> _instance = new Lazy<MyXmlSerializer>(() => new MyXmlSerializer());
   public static MyXmlSerializer Instance => _instance.Value;
   
   private MyXmlSerializer() { } // Закрытый конструктор
 
   public static void Serialize()
   {
 
   }
}

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


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

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

15   голосов , оценка 4 из 5
Похожие ответы