C# 中的 void* 替代项

本文关键字:中的 void | 更新日期: 2023-09-27 17:56:34

我正在创建一个调用回调函数的类,我希望它在某些情况下传递一些数据,但这些数据可能会有所不同。在C++我会使用 void*,但在 C# 中它是不安全的,这意味着它可能会被 GCed。有没有办法在 C# 中传递未知类型的数据?

C# 中的 void* 替代项

您有两个选择:

泛型(允许您在调用方法时指定类型...并且对象将在方法中正确键入。

// Definition:
public void MyMethod<T>(T myParameter)
{
    /* My Code */
}
// Call:
MyMethod<int>(999);
// Call:
MyMethod<bool>(false);

或 System.Object(这意味着您必须在方法中确定对象的实际类型并适当地强制转换)

// Definition:
public void MyMethod(Object myParameter)
{
    /* My Code */
}
// Call:
MyMethod(999);
// Call:
MyMethod(false);

你应该为此使用泛型。

http://msdn.microsoft.com/en-us/library/twcad0zb.aspx

最简单的解决方案是使用 object 类型,因为所有其他对象都继承自此对象。这样做可以允许自己传入任何对象类型。

http://msdn.microsoft.com/en-us/library/system.object.aspx

你会在一个对象上传递它。与C++不同的是,您可以在 C# 中执行类型安全转换,而在 C++ 中则不能。

我认为你应该使用Object。

如果你使用的是 .net 4,也可以使用 dynamic 类型。