public class PartialEvaluator : ExpressionVisitor { private Func<Expression, bool> m_fnCanBeEvaluated; private HashSet<Expression> m_candidates; //构造函数 public PartialEvaluator() : this(CanBeEvaluatedLocally) // 请问 this 里面的 参数 CanBeEvaluatedLocally 如何理解 { } public PartialEvaluator(Func<Expression, bool> fnCanBeEvaluated) { this.m_fnCanBeEvaluated = fnCanBeEvaluated; } //这个静态函数好像是this里面的参数 private static bool CanBeEvaluatedLocally(Expression exp) { return exp.NodeType != ExpressionType.Parameter; } }
请问
PartialEvaluator evaluator = new PartialEvaluator();
这句执行是如何理解的.我主要不理解 PartialEvaluator 的函数函数 this 里面 传入的 一个静态函数的参数CanBeEvaluatedLocally,是什么意思?怎样理解执行?
如果是说将 CanBeEvaluatedLocally 方法的返回值作为构造参数,那么 CanBeEvaluatedLocally该 方法本身是需要接受一个 Expression exp参数的,该参数又是如何传进去的呢?有点不解~
谁给我讲讲这个基础,谢谢!
这是C#的语法糖,可以直接将方法转成委托。例如我们很常见的button点击事件:
button.Click += new EventHandler(button_Click); //完整写法 button.Click += button_Click; //本质相同,省略的写法
回到你的代码:
public PartialEvaluator() : this(CanBeEvaluatedLocally)
调用了另外一个构造函数,这个构造函数接受一个Func<Expression, bool>(即输入为Expression类型,输出为bool类型)的委托,而CanBeEvaluatedLocally这个方法是符合这个委托签名的。根据上面讲的那个语法糖例子,此处等价于:
public PartialEvaluator() : this(new Func<Expression,bool>(CanBeEvaluatedLocally))
CanBeEvaluatedLocally就是Func<Expression, bool>类型的委托,this(CanBeEvaluatedLocally)调用的就是第二个构造方法。
其实这里的无参构造函数的作用只是给m_fnCanBeEvaluated委托指定一个默认值,这个值就是CanBeEvaluatedLocally。
m_fnCanBeEvaluated委托是由其它代码来调用的,如:m_fnCanBeEvaluated(new Expression()),Expression 参数是由调用的代码传进去的,但目前你这个类并没有调用的方法。