Я хотел бы, чтобы несколько моих классов имели возможность сообщить мне, сколько полей в них, и я хотел бы обеспечить, чтобы все мои классы имели это наследование, например:Статическая информация в классе
// this code does not compile
abstract class Base
{
abstract static const int FieldCount = -1
}
class Node : Base
{
int x, y, z; // has three fields, so:
override static const int FieldCount = 3;
}
class Way : Base
{
int w, x, y, z; // has four fields, so:
override static const int FieldCount = 4;
}
Я не могу заставить его работать, а не интерфейс или абстрактный базовый класс. Мне нужно, чтобы эта информация была доступна только с типом, а не через фактический экземпляр класса (поэтому статический).
class EnumerableDataReader<TSource> : IDataReader where TSource : Base {
public int FieldCount {
get {
return TSource.FieldCount <- access the static info, does not work
}
}
}
Есть ли способ сделать это, или будет здесь Отражение - единственный способ пойти?
Спасибо!
конечно же отражение будет путь - в противном случае, что бы остановить вас сообщать неправильный номер, даже если бы был способ сделать синтаксический работу? – Jon
Вы не можете использовать полиморфизм для статических членов. Вы можете использовать 'override' только для методов, событий и свойств. не с 'Fields' или' Constants' –
@James, даже если Op изменяет свойство, это тоже не сработает. поскольку член является ** статическим ** –