Czy pozwolenie klasie przekazuje się jako parametr rodzajowej zła klasy bazowej?

Po raz pierwszy zobaczyłem kolegę, który to zrobił, gdy wprowadzał pule obiektów. Minął klasę, która miała zostać połączona jako parametr do ogólnej klasy bazowej. Ta klasa bazowa ustanowiła kod pulowania.

Dziwne jest to, że klasa podstawowa będzie wiedziała o swoich dzieciach. Jest to uważane za złą praktykę w każdym normalnym przypadku. Ale w tym przypadku rodzic jest tylko rozwiązaniem technicznym, aby uniknąć pisania kodu powtarzalnego. Do żadnej klasy podstawowej nie odwołuje się żaden inny kod.

Wadą tej konstrukcji jest to, że „wypala ona klasę podstawową”. Nie można wprowadzić ogólnej klasy bazowej w środku hierarchii. Ten problem może być poza tematem.

Poniżej znajduje się przykład:

public abstract class Singleton<T> where T : class
{
    public static T Instance { get; private set; }

    public Singleton()
    {
        if (Instance != null)
            throw new Exception("Singleton instance already created.");
        Instance = (T) (object) this;
    }
}

public class MyClass : Singleton<MyClass>
{
}

Poprawiony kod:

public abstract class Singleton<T> where T : Singleton<T>
{
    public static T Instance { get; private set; }

    public Singleton()
    {
        if (Instance != null)
            throw new Exception("Singleton instance already created.");
        Instance = (T) this;
    }
}

public class MyClass : Singleton<MyClass>
{
}

questionAnswers(2)

yourAnswerToTheQuestion