C# 双支架铸件

C# 双支架铸件,c#,interface,casting,C#,Interface,Casting,正常的演员阵容是通过这样的方式实现的 (int)foo; 然而,我发现了一段代码: ((IFoo)object).Method(); 我不明白这里发生了什么,尽管在智能意义上,我可以在接口上看到公开的方法。如果我做了(IFoo)foo,我就得不到 谢谢这是关于运算符优先级的。在 (IFoo)foo.Bar(); 成员访问操作符具有优先级,因此首先对其求值foo.Bar(),并将结果转换为IFoo 在 括号确定了不同的优先级foo首先被强制转换为IFoo,然后IFoo会调用Bar() 这可能

正常的演员阵容是通过这样的方式实现的

(int)foo;
然而,我发现了一段代码:

((IFoo)object).Method();
我不明白这里发生了什么,尽管在智能意义上,我可以在接口上看到公开的方法。如果我做了
(IFoo)foo,我就得不到


谢谢

这是关于运算符优先级的。在

(IFoo)foo.Bar();
成员访问操作符
具有优先级,因此首先对其求值<调用code>foo.Bar()
,并将结果转换为
IFoo

括号确定了不同的优先级
foo
首先被强制转换为
IFoo
,然后
IFoo
会调用
Bar()


这可能是一种非常常见的技术,所以这是一个好问题。随着时间的推移,您将看到更多类似的情况。:)

这是关于运算符优先级的。在

(IFoo)foo.Bar();
成员访问操作符
具有优先级,因此首先对其求值<调用code>foo.Bar(),并将结果转换为
IFoo

括号确定了不同的优先级
foo
首先被强制转换为
IFoo
,然后
IFoo
会调用
Bar()


这可能是一种非常常见的技术,所以这是一个好问题。随着时间的推移,您将看到更多类似的情况。:)

在给出的示例中

((IFoo)foo).FooMethod();"

…正在将foo对象强制转换为IFoo接口。然后,调用IFoo接口的foothod()。括号确保先进行转换,以确保在将对象转换到适当接口后对其调用方法。正如格雷格正确地指出的,这只是关于运算符优先级的问题。

在给出的示例中

((IFoo)foo).FooMethod();"

…正在将foo对象强制转换为IFoo接口。然后,调用IFoo接口的foothod()。括号确保先进行转换,以确保在将对象转换到适当接口后对其调用方法。正如格雷格正确地指出的那样,这只是关于运算符优先级的问题。

如果不使用额外的括号,您可以尝试在
foo
上调用
FooMethod()
,而不是在casted
foo
上调用它。如果它不是
IFoo
(或实现
IFoo
的类),为什么要将其命名为
foo
,如果是这样的话,你就不需要施法了。(如果您想要一个
IFoo
,但有一个
对象
,那么
var foo=obj as IFoo;
)您是对的,它是对象@crashmstr iti如果您不使用额外的括号,您将尝试在
foo
上调用
FooMethod()
,而不是在已转换的
foo
上。如果它不是
IFoo
(或实现
IFoo
的类),为什么要将其命名为
foo
。(如果您想要一个
IFoo
,但有一个
对象
,那么
var foo=obj as IFoo;
)您是对的,它是对象@谢谢你的解释,我现在明白了:)谢谢你的解释,我现在明白了:)谢谢你的投入:)谢谢你的投入:)