У меня есть пара вопросов о моем понимании области .NET.
Пожалуйста, рассмотрите следующий макет:
interface IListInterface<T>
{
//brevity
}
interface IClassInterface
{
int Count { get; }
}
class A<T> : IClassInterface
{
List<IListInterface<T>> MyList = new List<IListInterface<T>>();
public virtual int Count { get { return MyList.Count; } }
public void Add(IListInterface<T> item) { MyList.Add(item); }
public IEnumerable<String> GetAllAsString(T source) { return MyList.Select(o=>o.ToString()); }
}
class B<T1, T2> : A<T1>
{
List<IListInterface<T2>> MyList = new List<IListInterface<T2>>();
public override int Count { get { return base.Count + MyList.Count; } }
public void Add(IListInterface<T2> item) { MyList.Add(item); }
public IEnumerable<String> GetAllAsString(T1 source1, T2 source2)
{
return base.GetAllAsString(source1).Union(MyList.Select(o => o.ToString()));
}
}
class C<T1, T2, T3> : B<T1, T2>
{
List<IListInterface<T3>> MyList = new List<IListInterface<T3>>();
public override int Count { get { return base.Count + MyList.Count; } }
public void Add(IListInterface<T3> item) { MyList.Add(item); }
public IEnumerable<String> GetAllAsString(T1 source1, T2 source2, T3 source3)
{
return base.GetAllAsString(source1, source2).Union(MyList.Select(o => o.ToString()));
}
}
Мои вопросы:
Какой термин используется для описания того, что делают класс B и класс C? Наследование перегрузок общего типа ?
При написании такого объекта, как правило, много повторяющегося кода, особенно при добавлении большего количества методов, которые в конечном итоге просто вызывают его базу, и добавляют свою собственную информацию к возвращаемому объекту. Есть ли лучший способ сделать это, чтобы обеспечить более поддерживаемый файл класса?
Отредактировано с учетом необходимости использования этого метода
Используя этот тип наследования, можно определить один объект, который будет ограничивать требования к вводу данных и объяснять его использование.
var x = new C<String, int, DateTime>();
Теперь вы знаете типы, из которых состоит объект, и вы получите ошибку во время компиляции, если попытаетесь вызвать x.GetAllAsString(0, "hello", "world");
Этот тип объекта может не работать для вас, и его пригодность для использования не является предметом моего вопроса. Мои вопросы касаются названия этого метода и повторного использования кода в этой ситуации.