1

我遇到了从通用集合继承的以下用法。

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.NameName1)而不是集合的一部分,我可以访问model[0].NameName2)。这种双重性使我感到困惑。

4

1 回答 1

2

关于

 class Model : Collection<Model>

首先,我想指出,这看起来不是一个好主意。

但它并不像看起来那样令人困惑。没有循环继承,只是对Model类型的前向引用。

稍微理智一点的版本:

class Model
{
    public List<Model> SubModels { get; set; }
}

这里List<>还包含一个尚未完全定义的类型。

于 2013-06-26T21:36:36.793 回答