Я наткнулся на следующее использование Inheriting from Generic Collection.Inheriting T from from Collection <T>
class Model : Collection<Model>
{
public string Name { get; set; }
public string Password { get; set; }
}
И он может быть реализован как:
var model = new Model {Name = "Name1", Password = "Pass1"};
model.Add(new Model { Name = "Name2", Password = "Pass2" });
model.Add(new Model { Name = "Name3", Password = "Pass3" });
И я могу получить доступ к model
как в единственном экземпляре, а также объект коллекции.
Console.Out.WriteLine("Original: " + model.Name + " : " + model.Password + Environment.NewLine);
foreach (var m in model)
{
Console.Out.WriteLine(m.Name + " : " + m.Password + Environment.NewLine);
}
Как это возможно, и что на самом деле происходит под обложками?
Edit: Для дальнейшего уточнения, model
имеет единственный экземпляр, отдельный, где я могу получить доступ к model.Name
(Name1), а не часть коллекции, где я могу получить доступ model[0].Name
(Имя2). Эта двойственная природа меня смущает.
Почему это не должно быть возможно? Это в значительной степени просто делает Collection> с некоторыми дополнительными колокольчиками и свистами. –
AlliterativeAlice
Я не уверен, что вы спрашиваете здесь. Последний блок кода (где вы имеете в виду «единственный экземпляр, а также объект коллекции», просто выполняет итерацию каждого элемента в коллекции через цикл foreach, другими словами, он выполняет итерацию через коллекцию 'model' , присваивая каждому элементу в коллекции переменную 'm' и доступ к этой переменной' m'. Здесь нет «обоих», и в любом из вашего опубликованного кода ничего не происходит «под обложками» (я не downvote - ваше qeustion просто неясно, и я прошу вас [изменить], чтобы уточнить, о чем вы нас спрашиваете.) –
Ничего странного в этом коде, кроме того, что это потенциально запутанно. –