c# - 如何避免不得不继续提出论点?
问题描述
我正在编写一个简单的 MVC 模式。我的视图实现了一个简单的界面。
public interface IComponentView
{
void Render(ComponentModel componentModel);
}
这里的 ComponentModel 是一个抽象模型类。控制器负责准备新的组件模型并在传递新模型时调用视图的 Render() 方法。正如您可以想象的那样,视图在它自己的 Render() 函数中所做的第一件事是将接收到的父类 ComponentModel 向下转换为其适当的子类模型,以便视图可以使用所有属性等进行渲染。这是一个例子。
public SpecialMenuView : IComponentView
{
...
public void Render(ComponentModel componentModel)
{
SpecialMenuModel model = (SpecialMenuModel)componentModel;
// use model to render stuff
}
...
}
有没有更好的方法来做到这一点,而不是继续为我拥有的每个 UI 组件进行强制转换?
解决方案
我不知道你用这个接口做什么,但是如果你想传递类型信息,为什么不使用泛型呢?
public interface IComponentView<TModel> where TModel : ComponentModel
{
void Render(TModel componentModel);
}
public SpecialMenuView : IComponentView<SpecialMenuModel>
{
...
public void Render(SpecialMenuModel componentModel)
{
// use model to render stuff
}
...
}
您可以使该界面逆变以获得奖励积分。
推荐阅读
- python - 在 jupyter notebook 中加载数据集
- google-compute-engine - Create firewall exception on Google Compute Engine and connect via telnet
- python-3.x - Python 3.7 boolean indexing *warning* using 'list'
- javascript - 具有初始状态的复选框组
- c# - 以毫秒为单位的不同数字的 TimeSpan 解析问题
- php - MySQL 多重条件类型
- azure - Azure 弹性数据库是否按开发人员收费?
- python - 如何在使用 wxPython 时滚动时更改 wx.Choice?
- ios - 如何将录音和图像同时上传到 Firebase 存储
- php - Symfony 4 amqp/messenger 生成pdf