1

需要为某种类型的对象调用函数,但我希望调用者指定我调用的函数。

在 C++ 中,我可以像这样使用指向成员的指针

class C 
{
    void F(void (A::*F)(int));
}

是否有任何 C# 等价物?

请不要使用功能数组或任何技巧,例如开关。即使在功能签名满足要求的情况下添加了新功能,我也希望此解决方案能够正常工作。

编辑:正如我所读到的:委托就像 C++ 函数指针,但类型安全。

但我需要成员函数指针。例如,在我的函数中,我获得了确定的对象:

var properties = manager.GetProperties();

现在需要获取某些类型的属性:

var type1 = properties.GetType1();

但我需要这样的东西

var typeX = properties.GetTypeX();

获取此函数调用的用户请求类型。TypeX 必须是什么?

Type1..N 有共同的基类,我需要使用这个类。

4

2 回答 2

3

是的,它被称为代表

有两个标准的:Func<T>Action<T>

于 2013-10-29T08:14:23.503 回答
1

在 C# 中,有委托来指定要在某处传递的函数的签名。

您的代码应该尝试这样的事情:

class Program
{
    static void Write(int i)
    {
        Console.Write(i);
    }

    static void Main(string[] args)
    {
        C c = new C { FunctionToExecute = Write };
        c.SomeMethod(5);
    }
}

delegate void D(int F);

class C
{
    public D FunctionToExecute { get; set; }

    public void SomeMethod(int arg)
    {
        FunctionToExecute(arg);
    }
}

D 指定签名,FunctionToExecute 是指向您要执行的内容的指针。

如果你想传递未知类型的对象,那么有泛型。或者我不明白你到底想要什么。这里提到的 Action 和 Func 是通用委托。

于 2013-10-29T08:23:28.910 回答