C# 和指向成员的指针

本文关键字:指针 成员 | 更新日期: 2023-09-27 18:37:19

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

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

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

是否有任何 C# 等效项?

请不要使用函数数组或任何像开关这样的技巧。我希望即使在函数签名满足要求时添加了新功能,此解决方案也能正常工作。

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

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

var properties = manager.GetProperties();

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

var type1 = properties.GetType1();

但我需要这样的东西

var typeX = properties.GetTypeX();

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

其中类型1..N 有公共基类,我需要使用这个类。

C# 和指向成员的指针

是的,它被称为代表

有两种标准:Func<T>Action<T>

在 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 是泛型委托。