视图模型继承
本文关键字:继承 模型 视图 | 更新日期: 2023-09-27 17:57:07
我想根据所选选项加载带有ViewModel的屏幕。
我认为继承将是这里的关键,因为很多属性都是相同的。以下是我拥有的代码摘录。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
bool isHandheld = false;
var pdv1 = isHandheld == true ? new PDVHH() : new PDV();
txtCaseID.Text = pdv1.CaseID;
txtPDV.Text = isHandheld == true ? pdv1.PDVString : string.Empty;
txtPDVHH.Text = isHandheld == true ? pdv1.PDVHHString : string.Empty;
}
}
class basePDV
{
public string CaseID { get; set; }
}
class PDV : basePDV
{
public string PDVString { get; set; }
}
class PDVHH : basePDV
{
public string PDVHHString { get; set; }
}
我收到的错误是..."无法确定条件表达式的类型,因为'WindowsFormsApplication1.PDVHH'和'WindowsFormsApplication1.PDV'之间没有隐式转换"
我希望有人能给我一些解决方案的指导。
好的,你的问题不是关于继承或 ViewModels,而是关于?:
(条件运算符)如何工作。
以下内容将修复它:
var pdv1 = isHandheld == true ? (basePDV) new PDVHH() : (basePDV) new PDV();
虽然你的代码看起来很有道理,但文档说你需要在 PDVHH 和 PDV 之间进行转换,无论哪个方向,但不考虑转换为 basePDV。
当您可以找到 PDVString 和 PDVHHString 的通用名称并将其实现为基类中的单个属性时,它可能会像您想要的那样工作。甚至更简单。请注意,class PDV : basePDV {}
正常。
C# 语言规范区分了三种类型的语句。通常,您可以有以下语句:
标记语句 - 这是首选语句
声明语句 - 这适用于变量声明
嵌入式语句 - 适用于所有剩余语句
在 if 语句中,主体必须嵌入语句,这解释了为什么代码的第一个版本不起作用。
if (布尔表达式) 嵌入语句如果(布尔表达式)嵌入语句其他嵌入语句
变量声明是声明语句,因此它不能出现在正文中。如果将声明括在括号中,则会得到一个语句块,这是一个嵌入语句(因此它可以出现在该位置)。
var pdv1 = isHandheld == true ? new PDVHH() : new PDV(); is considered a declaration-statement.
//var pdv1 = isHandheld == true ? new PDVHH() : new PDV(); won't work but the following will
// The above is the equivalent of the below statement which will NOT work.
if (isHandheld)
var pdv1 = new PDVHH();
else
var pdv1 = new PDV();
if (isHandheld)
{
var pdv1 = new PDVHH();
}
else
{
var pdv1 = new PDV();
}