Вы можете использовать для этого дженерики. Было бы достаточно что-то вроде следующего:
public static class Extensions
{
public static void Add<T>(this IList<T> source, SomeParameter value)
where T : IField, new()
{
}
}
По сути, вы определяете универсальный метод, у которого единственный универсальный параметр T
должен иметь конструктор без параметров (where T : new()
) и реализует интерфейс IField
.
Сделав это, вы могли бы написать что-то вроде следующего:
IList<IField> AllFields = new List<IField>();
AllFields.Add(new IntField(){});
AllFields.Add(new DecimalField(){});
У вас также может быть что-то вроде следующего:
IField SomeProperty;
IField SomeProperty2;
IList<IField> AllFields = new List<IField>();
AllFields.Add(SomeProperty = new IntField(){});
AllFields.Add(SomeProperty2 = new DecimalField(){});
Однако я не вижу никакого использования этого из того, что вы описали, что вы хотите сделать.