C#奇数方法调用转换

时间:2014-04-06 12:03:45

标签: c# casting

我正在使用以下代码片段,在尝试学习WPF时。

((DependencyObject)targetObject).SetValue(dp, finalValue);

什么是代码段?我知道实例方法SetValue将要调用,但是这个(DependencyObject)我真的不明白。这与铸造有什么关系?

2 个答案:

答案 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
}

您问题中的示例等同于第三种情况。