xaml.cs中连续2个括号是什么意思?

时间:2010-09-09 12:39:51

标签: c# .net silverlight xaml

刚开始学习C#(在xaml中),所以感谢一些阐述:

((MSAvalon.Windows.Serialization.ILoaded)(_Text_2_)).DeferLoad();

不确定所有圆括号的含义是什么意思是“_Text_2_”是对象“MSAvalon.Windows.Serialization.ILoaded”的子节点?

如果是这样的话......为什么不是这样的:

MSAvalon.Windows.Serialization.ILoaded._Text_2.DeferLoad();

3 个答案:

答案 0 :(得分:3)

_Text_2_被转换为MSAvalon.Windows.Serialization.ILoaded对象/接口,然后调用方法DeferLoad

答案 1 :(得分:2)

这是一个类型转换,用于告诉编译器变量是特定类型的,当它不明显时。它可以像这样使用:

class Foo {
    private object _Text_2_;

    void Method() {
        ((MSAvalon.Windows.Serialization.ILoaded)_Text_2_).DeferLoad();
    }
}

在这里省略类型转换会导致编译器错误,因为DeferLoad不是object的方法。你在这里告诉编译器你有一些特殊的知识_Text_2_就是你说的那样。

答案 2 :(得分:0)

基本上它始于((以便可以调用DeferLoad。我将用一个例子来说明。

让我们说你做了以下事情。

object s = "Hello world";

现在包含一个字符串。如果你想使用强制转换使这个字符串大写(如在你的例子中,我不能简单地写这个

(string)s.ToUpper();

无法调用ToUpper(),因为它对于object类型的变量无效。如果你把它重写为

((string)s).ToUpper()

它有效。由于括号,首先将s转换为字符串,然后在变量上调用string.ToUpper()。

请注意,在这种情况下,(s as string).ToUpper()将是一种更清洁的方法。