通常,我知道什么样的特定控件会引发某个事件,因此我可以在事件处理程序内部通过其发件人参数的手册降低对其进行引用(假设该发件人是一个按钮(:
var refToSender = (Button)sender;
现在,如果出于任何原因我不知道发件人的确切类型,是否可以在不使用条件块的情况下进行自动降落?换句话说,是否有可能写这样的东西:
var refToUnknownSender = (Magic_here)sender;
您可以,但是我正在努力看看为什么您会从中受益。我会解释一下我的想法。在您的处理程序中,您可以这样做:
Type t = sender.GetType();
var myvar = Convert.ChangeType(sender, t);
myvar现在是一个按钮或其他。一切都很好,直到您尝试在任何代码中使用它。因为如果您然后尝试使用依靠该类型的东西:
string senderName = myvar.Name;
编译器不会有任何内容,因为它不知道哪种类型的sendername是什么类型,所以它不知道它具有名称属性。
我看不到以某种通用方式降落的意义,因为您这样做是为了使用该类型编写代码。如果您不知道类型,那么就无法做到。
所有这些在很大程度上对使用MVVM的开发人员来说都是学术性的,因为任何事件处理程序都可能处于行为中,并且通常已经在ViewModels中具有属性类型。