代码之家  ›  专栏  ›  技术社区  ›  bcm

一行中的两个括号在xaml.cs中意味着什么?

  •  1
  • bcm  · 技术社区  · 15 年前

    刚刚开始学习C(在XAML中),因此请欣赏以下详细介绍:

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

    不知道圆括号的意思是什么…这是否意味着“_text_2_”是“msavalon.windows.serialization.iloaded”对象的子对象?

    如果是这样…为什么不只是像这样:

    MSAvalon.Windows.Serialization.ILoaded._Text_2.DeferLoad();
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   twon33    15 年前

    这是一种类型转换,用于告诉编译器变量是一种特殊类型,而不是显而易见的类型。它可以这样使用:

    class Foo {
        private object _Text_2_;
    
        void Method() {
            ((MSAvalon.Windows.Serialization.ILoaded)_Text_2_).DeferLoad();
        }
    }
    

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

        2
  •  3
  •   Fredrik Leijon    15 年前

    _文本_2_u被强制转换为msavalon.windows.serialization.iloaded对象/接口,然后调用方法deferLoad。

        3
  •  0
  •   Øyvind Bråthen    15 年前

    基本上,它是以((以便可以调用DeferLoad)。我举个例子来说明。

    假设您执行以下操作。

    object s = "Hello world";
    

    S现在包含一个字符串。如果您想使用强制转换将这个字符串变为大写(在您的示例中,我不能简单地编写这个

    (string)s.ToUpper();
    

    无法调用toupper(),因为它对对象类型的变量无效。如果你把这个改写成

    ((string)s).ToUpper()
    

    这是有效的。由于括号的原因,s首先被强制转换为字符串,然后对变量调用string.toupper()。

    注意在这种情况下 (s as string).ToUpper() 会是一个更干净的方法。

    推荐文章