通常,我知道什么样的特定控件会引发某个事件,所以我可以在事件处理程序中通过手动向下传播它的sender参数来引用它(假设发送者是一个Button):< / p>
var refToSender = (Button)sender;
现在,如果由于任何原因我无法确定发送方的确切类型,是否可以进行自动向下转换而无需使用条件块?换句话说,是否有可能写出这样的东西:
var refToUnknownSender = (Magic_here)sender;
答案 0 :(得分:-1)
你可以,但我很难理解为什么你会从中获益。 我会解释我的想法。 在您的处理程序中,您可以这样做:
Type t = sender.GetType();
var myvar = Convert.ChangeType(sender, t);
myvar现在是一个按钮或其他什么。 在您尝试在任何代码中使用它之前,这一切都很顺利。 因为如果你尝试使用依赖于这种类型的东西,比如:
string senderName = myvar.Name;
编译器不具备任何内容,因为它不知道senderName是什么类型,所以它不知道它有Name属性。
为了使用该类型编写代码,我无法看到以某种通用方式进行向下转换的重点。 如果您不知道该类型,那么您就无法做到。
所有这些对于使用MVVM的开发人员来说都是学术性的,因为任何事件处理程序都可能在行为中,并且您通常已经在viewmodel中拥有了属性类型。