从集合继承T<;T>;
本文关键字:gt 集合 lt 继承 | 更新日期: 2023-09-27 18:19:59
我遇到了以下从泛型集合继承的用法。
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);
}
这是怎么可能的,在幕后到底发生了什么?
编辑:为了进一步澄清,model
有一个单独的实例,我可以在其中访问model.Name
(Name1),而不是集合的一部分,在那里我可以访问model[0].Name
(Name2。这种双重性使我感到困惑。
关于
class Model : Collection<Model>
首先我想指出,这看起来不是一个好主意。
但它并不像看上去那么令人困惑。没有循环继承,只是对Model
类型的前向引用。
一个稍微理智一点的版本:
class Model
{
public List<Model> SubModels { get; set; }
}
这里,List<>
还包含尚未完全定义的类型。