刚开始学习C#(在xaml中),所以感谢一些阐述:
((MSAvalon.Windows.Serialization.ILoaded)(_Text_2_)).DeferLoad();
不确定所有圆括号的含义是什么意思是“_Text_2_”是对象“MSAvalon.Windows.Serialization.ILoaded”的子节点?
如果是这样的话......为什么不是这样的:
MSAvalon.Windows.Serialization.ILoaded._Text_2.DeferLoad();
答案 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()
将是一种更清洁的方法。