【发布时间】:2016-08-02 05:21:27
【问题描述】:
我正在学习 C# 中的指针,并且很好奇是否可以在 C# 中使用 C++ 风格的函数指针。是的,我知道 C# 对函数指针(称为委托)有自己的等效概念。但我只想知道是否可以在 C# 中使用指针而不使用委托来实现相同的目标。
如果在 C# 中使用指针是完全合法的(使用 unsafe 选项)并且指针语义几乎与 C/C++ 相似,那么在我看来,人们也应该能够使用 C/C++ 风格的函数指针。请指导我。可能吗?如果是怎么办?如果不是那为什么?
请注意 C# 和 C/C++ 中指针用法的相似性,如下例所示
/* Using pointers in C# (Very similar to C/C++) */
using System;
namespace UnsafeCodeApplication
{
class TestPointer
{
public unsafe static void Main()
{
int[] list = {10, 100, 200};
fixed(int *ptr = list)
/* let us have array address in pointer */
for ( int i = 0; i < 3; i++)
{
Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i));
Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
}
Console.ReadKey();
}
}
}
【问题讨论】:
-
快速说明:C# 没有函数,但 google for UnmanagedFunctionPointer
-
和指向 C# 中方法的指针被称为...委托
-
我更喜欢参考这个:stackoverflow.com/questions/155609/…
-
你想通过函数指针来实现什么?我想你可以使用 C++/CLI 做任何你想做的事。使用 IntPtr 存储指向任何东西的指针,如果你想调用 C# 函数,从 C++ 端固定它,也可以随意调用。你甚至可以生成 ILCode 并搞乱汇编,但你真的想走多远?
-
@Lashane:委托是一个对象,它是函数指针(及其接收者)周围的抽象。问题是 C# 是否也支持直接操作函数指针。 CLR 允许这样做,因此可以合理地假设 C# 提供了一些用于这样做的语法。但是,它没有。
标签: c# c++ pointers delegates function-pointers