我的领域模型有几个 NewsType,它们是 NewsItem 的子类,如下所示(简化):
public abstract class NewsItem : Entity
{
public virtual Account Account { get; set; }
public virtual DateTime DateTime { get; set; }
}
这里有几个 NewsItem 的子类:
public class NewsItemJoiner : NewsItem
{
public virtual Account AccountJoined { get; set; }
}
public class NewsItemStatus : NewsItem
{
public virtual string Status { get; set; }
}
在我的 MVC 应用程序中,我想返回 Newsitem 的集合,其中可能包含 NewsItem 的许多不同子类。我现在需要做的是遍历每个新闻项目,并从相关类中为特定类型的 NewsItem 调用渲染函数...代码可能会更容易解释它:
public interface IRenderer<T> where T : NewsItem
{
string Render(T item);
}
public class JoinedRenderer : IRenderer<NewsItemJoiner>
{
public string Render(NewsItemJoiner item)
{
return String.Format("{0} has just joined our music network.", item.AccountJoined.ArtistName);
}
}
public class StatusUpdateRenderer : IRenderer<NewsItemStatus>
{
public string Render(NewsItemStatus item)
{
return String.Format("<span class='statusupdate'>{0}<span>", item.Status);
}
}
我需要根据 NewsItem 的类型以某种方式调用正确的类渲染函数。
最佳答案
对于虚函数来说,这似乎是一个相当明显的例子......
public abstract class RenderableNewsItem : NewsItem
{
abstract public string Render();
}
public class NewsItemStatus : RenderableNewsItem
{
public virtual string Status { get; set; }
public string Render()
{
return String.Format("<span class='statusupdate'>{0}<span>", this.Status);
}
}
关于C# Generics - 根据对象类型找到正确的具体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2274697/