我正在创建一个调用回调函数的类,我希望它在某些情况下传递一些数据,但数据可能会有所不同。在C ++中我会使用void *但在C#中它是不安全的,这意味着它可能会得到GCed。有没有办法在C#中传递未知类型的数据?
答案 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
类型,因为所有其他对象都继承自此对象。这样做可以让自己传入任何对象类型。
答案 3 :(得分:1)
你会在对象传递它。与C ++不同,您可以在C#中进行类型安全转换,而在C ++中则不能。
答案 4 :(得分:0)
我认为你应该使用Object。
答案 5 :(得分:0)
如果你在.net 4工作,你也可以使用dynamic
类型。