c从父类访问子类
本文关键字:子类 访问 父类 | 更新日期: 2023-09-27 18:29:52
我有两个类。珠宝是基础,戒指从中继承。
class Jewellery
{
public string Name { get; set; }
......
public Jewellery(string name)
{
Name = name;
}
}
class Ring : Jewellery
{
public string Size { get; set; }
public Ring(string name, string size) :base(name)
{
Size = size
}
}
现在,我主要创建了珠宝列表,并在该列表中添加了Ring对象。
Ring ring = new Ring("Diamond", "Very big");
List<Jewellery> jewellery = new List<Jewellery>();
jewellery.Add(ring);
现在,当调试时,我可以从珠宝列表中访问戒指对象。我可以从代码中完成吗?我认为应该这样做,但这行不通。
jewellery[0].Ring
您需要对其进行强制转换,例如:
var myRing = (Ring)jewellery[0];
或
var maybeRing = jewellery[0] as Ring;
if (maybeRing != null)
{
// do stuff
}
或
if (jewellery[0] is Ring)
{
// Cast and do stuff
}
对于多种类型,您可以
if (jewellery[0] is Ring)
{
// Cast and do stuff
}
else if(jewllery[0] is Necklace)
{
// and so on
}
请参阅MSDN中的安全铸造。
根据你想做什么,你可以使用Linq按类型过滤:
给定:
List<Jewellery> things = new List<Jewllery>();
然后:
public IList<T> GetJewellery<T>(this jewellery) where T : Jewellery
{
return jewellery.OfType<T>().ToList();
}
Can:
IList<Necklace> necklaces = things.GetJewellery<Necklace>();
IList<Ring> rings = things.GetJewellery<Ring>();