Зависимость от интерфейса в C#
Тип параметра или поля можно указать как интерфейс. Тогда в метод передают любой объект класса, который этот интерфейс реализует.
Класс, который хранит список участников, не привязан к конкретному типу разработчика - ему нужен только контракт программиста. Запишем команду:
interface IProgrammer
{
void AddLang(string lang);
int LangCount();
}
class Developer : IProgrammer
{
private List<string> langs = new List<string>();
public void AddLang(string lang)
{
langs.Add(lang);
}
public int LangCount()
{
return langs.Count;
}
}
class Team
{
private List<IProgrammer> members = new List<IProgrammer>();
public void Add(IProgrammer member)
{
members.Add(member);
}
public int TotalLangs()
{
int sum = 0;
foreach (IProgrammer member in members)
{
sum += member.LangCount();
}
return sum;
}
}
Создадим команду, добавим разработчика с языком и выведем суммарное число языков:
var team = new Team();
var dev = new Developer();
dev.AddLang("csharp");
team.Add(dev);
Console.WriteLine(team.TotalLangs());
Сделайте интерфейс IStorable с методом Save.
Сделайте класс Archive с методом Store,
принимающим IStorable.
Передайте в Store объект вашего класса Article.