我在查阅《C#语言规范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 ']'
能否用类似这样的语法来捕捉该语句?
编辑 我看到的例子是在项目的C#版本db4o
中,大致如下(我删除了大部分声明,只保留重要的声明)
internal abstract class ExpressionVisitor
{
protected virtual void VisitList<T>()
{
}
}
internal class HashCodeCalculation : ExpressionVisitor
{
protected override void VisitList<T>()
{
base.VisitList<T>();
}
}