void * C#中的替代品

时间:2011-05-13 13:27:27

标签: c# function arguments void-pointers

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

6 个答案:

答案 0 :(得分:8)

你有两个选择:

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

// 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);

答案 1 :(得分:8)

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

我认为你应该使用Object。

答案 5 :(得分:0)

如果你在.net 4工作,你也可以使用dynamic类型。