С учетом следующего кода:
using System.Collections.Generic;
static class Program {
static void Main() {
bar Bar = new bar();
baz Baz = new baz();
System.Console.WriteLine(
"We have {0} bars, rejoice!", bar.Cache.Count);
}
}
public abstract class foo {
public static List<foo> Cache = new List<foo>();
}
public class bar : foo {
public bar() { Cache.Add(this); }
}
public class baz : foo {
public baz() { Cache.Add(this); }
}
Вы получите (несколько ожидаемый) вывод: «У нас 2 бара, радуйтесь!».
Это невероятно, у нас теперь есть в два раза больше мест, где можно выпить пива (очевидно), но я действительно хочу, чтобы у каждого класса был свой кеш. Причина, по которой я не хочу просто реализовывать этот кеш в подклассе, заключается в том, что в моем абстрактном классе также есть некоторые методы, которые должны иметь возможность работать с кешем (а именно, выполнять итерацию по всем из них). Есть ли способ сделать это? Я рассмотрел использование интерфейса для foo
, но интерфейс не позволяет определять статические элементы как часть интерфейса.