我有这些课程,部分列出了相关位。
public class IVRTopology {}
public abstract class SANSwitch
{ public string name { get; set; }
}
public class CiscoSwitch : SANSwitch
{
public IVRTopology IVRTop = new IVRToplogy()
}
class SwitchViewModel : INotifyPropertyChanged
{
public SANSwitch sanswitch { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我做这样的事情时:
SwitchViewModel svm = new SwitchViewModel();
svm.sanswitch = new CiscoSwitch();
IVRTopology topo = svm.sanswitch.IVRTop;
Run Code Online (Sandbox Code Playgroud)
如果我尝试这样访问 IVRTop,编译器会警告我 svm.sanswitch 属于 SANSwitch 类型,并且没有 IVRTop 的定义:
IVRTopology topo = (CiscoSwitch)svm.SANSwitch.IVRTop
Run Code Online (Sandbox Code Playgroud)
也不行。我不想将 IVRTopology 的定义添加到抽象类中,因为我将有不使用它的其他子类。演员阵容有问题吗?我怎样才能做到这一点?我希望视图模型最终支持不同类型的开关。
强制转换是优先级低于运算符的操作.。
因此,当您运行以下代码时:
IVRTopology topo = (CiscoSwitch)svm.SANSwitch.IVRTop
Run Code Online (Sandbox Code Playgroud)
你正在有效地跑步
var ivrTop = svm.SANSwitch.IVRTop;
IVRTopology topo = (CiscoSwitch)ivrTop;
Run Code Online (Sandbox Code Playgroud)
简单的解决方法是使用括号强制正确的分辨率:
IVRTopology topo = ((CiscoSwitch)svm.SANSwitch).IVRTop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |