Это может быть достигнуто следующим образом:
public class Marker
{
public int[] GetChildMarks()
{
return new int[]
{
(int)GetType().GetField("Size").GetValue(this),
(int)GetType().GetField("Number").GetValue(this)
};
}
public int ShallNotBeInArray;
}
Предполагается, что у дочернего класса есть эти два поля, и они имеют тип int
.
Поскольку принудительного применения нет ( и на самом деле их не может быть, потому что это поля, а не свойства), этот подход является хорошим кандидатом для получения ошибок времени выполнения.
РЕДАКТИРОВАТЬ:
Можно извлечь значения всех полей как это:
public class Marker
{
public int[] GetChildMarks()
{
List<int> allIntegerFields = new List<int>();
// DeclaredOnly: only get fields declared by this type, not the ones declared by base classes
// Public | Instance: Only get non-static, public fields
foreach(FieldInfo fieldInfo in GetType().GetFields(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance))
{
if(fieldInfo.FieldType == typeof(int))
{
allIntegerFields.Add((int)fieldInfo.GetValue(this));
}
}
return allIntegerFields.ToArray();
}
public int ShallNotBeInArray;
}