gpt4 book ai didi

c# - C# 语言规范 4.0 中是否正确定义了基本访问权限?

转载 作者:太空狗 更新时间:2023-10-29 23:08:11 28 4
gpt4 key购买 nike

当我浏览 C# Language Specification v4.0 时,我注意到有一组规则定义如下:

invocationExpression:
primaryExpression '(' argumentList? ')'

primary-expression:
primary-no-array-creation-expression
array-creation-expression

primary-no-array-creation-expression:
literal
simple-name
parenthesized-expression
member-access
invocation-expression
element-access
this-access
base-access
post-increment-expression
post-decrement-expression
object-creation-expression
delegate-creation-expression
anonymous-object-creation-expression
typeof-expression
checked-expression
unchecked-expression
default-value-expression
anonymous-method-expression

base-access:
'base' '.' identifier
'base' '[' argument-list ']'

当我试图匹配这个语句时(顺便说一下,这是正确的语句,我已经看到它在一个项目中使用过)

base.VisitList<T>(list, visitor);

根据给定的规则,我没有看到如何做到这一点。不应将 base-access 定义为:

 base-access:
'base' '.' identifier type-parameter-list(opt)
'base' '[' argument-list ']'

或者类似的语法能够捕获语句的方式?

编辑 我看到的例子是在db4o项目的C#版本中,是这样的(我删除了大部分声明,只留下重要的声明)

internal abstract class ExpressionVisitor
{
protected virtual void VisitList<T>()
{
}
}

internal class HashCodeCalculation : ExpressionVisitor
{
protected override void VisitList<T>()
{
base.VisitList<T>();
}
}

最佳答案

确实看起来规范中可能存在错误。

解析表达式的方式

this.VisitList<T>(list, visitor)

如下:

invocation-expression

primary-expression '(' argumentList? ')'

primary-no-array-creation-expression '(' argumentList? ')'

member-access '(' argumentList? ')'

primary-expression '.' identifier type-argument-listopt '(' argumentList? ')'

this-access '.' identifier type-argument-listopt '(' argumentList? ')'

'this' '.' identifier type-argument-listopt '(' argumentList? ')'

等等。

换句话说,this-access被定义为

this-access:
'this'

如果 base-access 定义为

base-access:
'base'

然后是解析表达式的方式

base.VisitList<T>(list, visitor)

将如下所示:

invocation-expression

primary-expression '(' argumentList? ')'

primary-no-array-creation-expression '(' argumentList? ')'

member-access '(' argumentList? ')'

primary-expression '.' identifier type-argument-listopt '(' argumentList? ')'

base-access '.' identifier type-argument-listopt '(' argumentList? ')'

'base' '.' identifier type-argument-listopt '(' argumentList? ')'

等等。

但事实并非如此。

关于c# - C# 语言规范 4.0 中是否正确定义了基本访问权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19029373/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com