代码之家  ›  专栏  ›  技术社区  ›  Qwertie

带有显式“this”指针的委托?

  •  1
  • Qwertie  · 技术社区  · 15 年前

    是否可以采用类似于函数“f”的方法?

    class C {
        public void F(int i);
    }
    

    给一个代表 Action<C,int> ?

    我有一种模糊的回忆,微软正致力于支持这种适应。但也许我记错了!

    编辑 :我知道这不会在VS2008中编译:

    class C {
        public void F(int i);
        void G() {
            Action<C, int> test = this.F;
        }
    }
    

    我只是想知道MS是否提供了一种在BCL中实现这一点的方法,或者该特性是否会在未来的版本中添加。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Wesley Hill    14 年前

    最简单的方法可能是创建一个lambda,它需要 C 和一个 int 和电话 F C 通过 int :

    Action<C, int> test = (c, v) => c.F(v);
    

    您还可以创建一个 打开 委托给实例方法 C.F 与通常的委托类型相反,委托类型是“在其实例参数上关闭”。这可以通过反射和 Delegate.CreateDelegate 方法。虽然这将导致更直接的委托,但它很可能比您需要的更复杂。