我正在使用以下代码片段,在尝试学习WPF时。
((DependencyObject)targetObject).SetValue(dp, finalValue);
什么是代码段?我知道实例方法SetValue将要调用,但是这个(DependencyObject)我真的不明白。这与铸造有什么关系?
答案 0 :(得分:2)
targetObject
投放到DependencyObject
,因此可以调用SetValue
类型的DependencyObject
方法。
我的猜测targetObject
属于object类型,因此没有SetValue
方法可用 - 直到它被转换为止。
如果您删除(DependencyObject)
,则应该清楚 - object
类型没有SetValue
方法。
答案 1 :(得分:1)
阐述Kieren的答案 - 考虑以下情况:
public class Base {}
public class Derived : Base
{
public void DoStuff()
{
Console.WriteLine("Doing stuff!");
}
}
...
public static void Main(string[] args)
{
Derived myDerivedObject = new Derived();
Base myObjectAsBase = myDerivedObject; // This is fine because Derived "is a" Base
// call methods
myDerivedObject.DoStuff(); // OK - 'Derived' has a 'DoStuff()' method
myObjectAsBase.DoStuff(); // Compiler error - 'Base' does not have a 'DoStuff()' method
((Derived)myObjectAsBase).DoStuff(); // OK - myObjectAsBase is cast to type 'Derived' which has a 'DoStuff()' method
}
您问题中的示例等同于第三种情况。