3 votes

alternative void* en C#

Je crée une classe qui appelle une fonction de rappel et je veux qu'elle transmette certaines données dans certains cas, mais ces données peuvent varier. En C++, j'utiliserais void* mais en C#, ce n'est pas sûr et cela signifie qu'il pourrait être GCed. Existe-t-il un moyen de transmettre des données de type inconnu en C# ?

8voto

canon Points 14870

Vous avez deux options :

Génériques (qui vous permettent de spécifier le type lorsque vous appelez la méthode... et l'objet sera correctement typé dans la méthode).

// Definition:
public void MyMethod<T>(T myParameter)
{
    /* My Code */
}

// Call:
MyMethod<int>(999);

// Call:
MyMethod<bool>(false);

Ou System.Object (ce qui signifie que vous devrez vérifier le type réel de l'objet dans votre méthode et effectuer un cast approprié).

// Definition:
public void MyMethod(Object myParameter)
{
    /* My Code */
}

// Call:
MyMethod(999);

// Call:
MyMethod(false);

8voto

Joe Points 18328

Vous devriez utiliser les génériques pour cela.

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

1voto

Adam Driscoll Points 5117

La solution la plus simple serait d'utiliser l'option object car tous les autres objets héritent de cet objet. En procédant ainsi, vous vous autorisez à passer n'importe quel type d'objet.

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

1voto

Sean Points 22088

Tu le faisais circuler lors d'une objet . Contrairement à ce qui se passe en C++, vous pourrez effectuer un cast sécurisé par type en C#, ce qui n'est pas possible en C++.

0voto

james_bond Points 2592

Je pense que vous devriez utiliser Object.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X