C# 从派生类在视图中显示属性
我正试图了解继承和多态性,可能遇到了一个简单的问题 我得到了一个抽象基类和两个派生类。我创建了一个viewmodel,其中包含一个基类类型的列表,并将其传递给视图 我的问题是如何在视图中显示派生类的属性 模型C# 从派生类在视图中显示属性,c#,model-view-controller,C#,Model View Controller,我正试图了解继承和多态性,可能遇到了一个简单的问题 我得到了一个抽象基类和两个派生类。我创建了一个viewmodel,其中包含一个基类类型的列表,并将其传递给视图 我的问题是如何在视图中显示派生类的属性 模型 public abstract class Card { public string Name { get; set; } public int Manacost { get; set; } } public class Spell : Card { public
public abstract class Card
{
public string Name { get; set; }
public int Manacost { get; set; }
}
public class Spell : Card
{
public string Description { get; set; }
}
public class Minion: Card
{
public int AttackPower { get; set; }
public int Health { get; set; }
}
传递给视图的视图模型
public class DeckbuilderVM
{
public List<Card> CardLibary { get; set; }
}
公共类DeckbuilderVM
{
公共列表卡片库{get;set;}
}
看法
@model.DeckbuilderVM
@foreach(Model.CardLibary中的var项)
{
//你能接受这些吗
名称:@item.Name
Manacost:@item.Manacost
//我不能接这些电话
附件:@item.AttackPower
健康:@item.Health
//如何访问派生类的属性?
}
我看不出你如何做到你所要求的(不使用反射)。在OOP中使用基类类型而不是派生类型的要点是,您说的是您不想要特定于每个派生类型的东西。在您的示例中,继承仅用于重用实现,并且不存在多态性。当类没有抽象
成员时,将其标记为抽象
也是奇怪的(也是错误的)。//如何访问派生类的属性?
=>您需要将它们强制转换到子类中才能使用它。或者至少需要子类的引用才能访问这些属性。@Peter如果您正在建模的真实word对象始终是特定类型的抽象,那么对于抽象类,我可以看到一个令人信服的例子。@NickBailey:嗯,这只是我的意见。我想加上“IMO”,但这个评论太老了。即使您从未打算实例化该类,我也不认为将其标记为抽象类有什么意义,但显然意见不一抽象的要点是不应该创建card的对象,而应该只创建派生类的对象。基本上,我只需要将所有对象放在一个列表中,这样无论它们来自哪个派生类,我都可以一次遍历所有对象。这是一种错误的思维方式吗?
@model.DeckbuilderVM
@foreach (var item in Model.CardLibary)
{
//Can acces these
<p>Name: @item.Name</p>
<p>Manacost: @item.Manacost</p>
//Can't acces these
<p>Attactpower: @item.AttackPower </p>
<p>Health: @item.Health </p>
//How to acces property of the derived classes?
}