У меня есть несколько классов, содержащих дублированный код, особенно члены и, что наиболее важно, статический метод, который будет создавать новый экземпляр класса и возвращать этот экземпляр: либо ранее созданный экземпляр, зарегистрированный в словаре, либо новый экземпляр путем вызова конструктора.
Интерфейс не вариант, потому что у меня есть статический метод.Я попытался решить эту проблему, введя базовый класс, который реализует этот статический метод, но я не могу найти способ правильно создать и вернуть определенный дочерний класс.
Ниже приведен пример кода текущей ситуации скласс A и класс B, показывающие дублированный код.
public class A
{
private static readonly IDictionary<string, A> Registry = new Dictionary<string, A>();
public string Name { get; set; }
public A(string name)
{
this.Name = name;
}
public static A GetA(string instanceName)
{
lock (Registry)
{
if (!Registry.TryGetValue(instanceName, out var newInstance))
{
newInstance = new A(instanceName);
}
return newInstance;
}
}
}
И затем в классе B снова есть имя члена и метод GetX ().
public class B
{
private static readonly IDictionary<string, B> Registry = new Dictionary<string, B>();
public string Name { get; set; }
public B(string name)
{
this.Name = name;
}
public static B GetB(string instanceName)
{
lock (Registry)
{
if (!Registry.TryGetValue(instanceName, out var newInstance))
{
newInstance = new B(instanceName);
}
return newInstance;
}
}
}
Есть ли возможностьизбежать такого дублирования кода, введя базовый класс или каким-либо другим способом?