void * альтернатива в C # - PullRequest
3 голосов
/ 13 мая 2011

Я делаю класс, который вызывает функцию обратного вызова, и я хочу, чтобы в некоторых случаях он передавал некоторые данные, но эти данные могут отличаться.В C ++ я бы использовал void *, но в C # это небезопасно и это означает, что он может получить GCed.Есть ли способ передачи данных неизвестного типа в C #?

Ответы [ 6 ]

8 голосов
/ 13 мая 2011

Для этого вы должны использовать Generics.

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

8 голосов
/ 13 мая 2011

У вас есть две опции:

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 голос
/ 13 мая 2011

Вы бы раздали его на объекте . В отличие от C ++, вы сможете выполнять безопасное приведение типов в C #, а в C ++ - нет.

1 голос
/ 13 мая 2011

Самое простое решение - использовать тип object, поскольку все другие объекты наследуются от этого объекта.Делая так, вы позволяете себе передавать объекты любого типа.

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

0 голосов
/ 13 мая 2011

Если вы работаете в .net 4, вы также можете использовать тип dynamic.

0 голосов
/ 13 мая 2011

Я думаю, вы должны использовать Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...