我可以在不使用临时变量的情况下使用需要强制转换的对象的成员吗?

Twi*_*ter 0 c# casting

我想知道是否有一些方法可以使用铸造对象的方法而无需创建新变量.换句话说,有没有办法做到这一点:

abstract class event { }

class loop : event
{ 
    public int a;
}

static void main ()
{
     loop l = new loop();
     l.a = 5;
     event e = l; //supposing that 

     System.Console.WriteLine( (loop) (e).a );//error

     loop lcast = (loop) e;
     System.Console.WriteLine( lcast.a );//no error
}
Run Code Online (Sandbox Code Playgroud)

我可以在a不创建临时变量(lcast)的情况下访问该字段吗?

Jon*_*eet 5

这是运算符优先级的问题..优先级高于强制转换,所以这个:

(loop) (e).a
Run Code Online (Sandbox Code Playgroud)

被视为:

(loop) ((e).a)
Run Code Online (Sandbox Code Playgroud)

您希望在成员访问中强制转换然后使用结果 - 因此您需要比.for成员访问更紧密地绑定强制转换:

((loop) e).a
Run Code Online (Sandbox Code Playgroud)

有关完整的C#运算符优先级规则,请参阅MSDN.