C# 中的 void* 替代项
本文关键字:中的 void | 更新日期: 2023-09-27 17:56:34
我正在创建一个调用回调函数的类,我希望它在某些情况下传递一些数据,但这些数据可能会有所不同。在C++我会使用 void*,但在 C# 中它是不安全的,这意味着它可能会被 GCed。有没有办法在 C# 中传递未知类型的数据?
您有两个选择:
泛型(允许您在调用方法时指定类型...并且对象将在方法中正确键入。
// 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
类型。