2015-08-14 2 views
1

je suis tombé (à l'intérieur (définition) de la chaîne "classe" (NET).):Toujours en train d'utiliser "public String (char * value)" de nos jours?

public String(char* value); 

Ce qui est écrit dans le commentaire:

// Parameters: 
    // value: 
    //  A pointer to a null-terminated array of Unicode characters. 

Mes questions:

Puis-je l'utiliser uniquement dans un contexte non sécurisé, est-il toujours logique d'utiliser cette chaîne (valeur char *) de nos jours ou est-ce juste une relique du passé, basée sur ce "ABC \ 0" (fin de cette chaîne)?

Si je peux/dois l'utiliser, comment et quelle serait la situation pour cette méthode?

+1

Pourquoi C tag ?????? – Nishant

+0

@Nishant. Je pensais à l'intérieur de par exemple. "unsafe {char c = 'G'; char * pc = & c; Console.Writeline (c);}" il ressemble plus à c/C++ qu'à C#, surtout la syntaxe me le rappelle. – user254197

+0

Vraiment une relique du passé, utilisée pour faciliter les gens du code C++ au code C#. Je suppose qu'il peut être utile dans certains cas rares de faire appel à du code non géré P/Invoke et d'obtenir des chaînes terminées à zéro, mais normalement vous seriez en mesure de régler le problème pour que le marshaller gère cela pour vous. –

Répondre

1

Eh bien, nous avons deux scénarios possibles:

  1. Vous n'avez pas besoin de travailler avec le code dangereux. Si vous n'avez pas besoin de travailler avec un code dangereux, n'utilisez pas de code dangereux. Vous n'utiliserez jamais ce constructeur de chaîne.

  2. Vous devez travailler avec un code dangereux. Si vous avez besoin de travailler avec un code non sécurisé et char* pour une raison quelconque¹, cette méthode vous permet de "convertir" un char* en une chaîne .NET standard une fois que vous avez terminé vos opérations non sécurisées.

¹ Les cas d'utilisation possibles pour un code non sécurisé sont en dehors de la portée de cette question.