我正在学习C#中的指针,并且好奇是否可以在C#中使用C++样式函数指针.是的,我知道C#有自己的等效功能指针概念(称为委托).但我只是想知道使用C#中的指针是否可以实现相同,而不使用委托.
如果在C#中使用指针是完全合法的(使用不安全选项)并且指针语义几乎与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();
}
}
}
Run Code Online (Sandbox Code Playgroud) 请找到以下示例:
using System;
class MyClass
{
static int count = 0;
int id;
public MyClass()
{
id = count;
count++;
}
public override string ToString()
{
return "MyClass object #" + id;
}
}
class Test
{
static void Main()
{
MyClass ob1 = new MyClass();
MyClass ob2 = new MyClass();
MyClass ob3 = new MyClass();
Console.WriteLine(ob1);
Console.WriteLine(ob2);
Console.WriteLine(ob3);
}
}
Run Code Online (Sandbox Code Playgroud)
程序的输出如下所示:
MyClass对象#0
MyClass对象#1
MyClass对象#2
正如您在此处所见,方法ToString()在名为"MyClass"的类中被重写,但"MyClass"不是从任何类派生的,根本不存在继承.如果没有涉及继承如何使用'覆盖'?
如果我们将ToString()更改为任何其他方法名称说'HelloString()',如下面的代码片段所示:
public class Program
{
public static void Main(string[] args)
{
MyClass ob1 = …Run Code Online (Sandbox Code Playgroud)