2010-07-05 3 views
0

Est-il possible de transmettre un nombre entier comme référence lors de l'initialisation de classe et de sécuriser la référence?Affecter une référence d'un nombre entier dans une classe

class Foo { 
    private int _refVal; 
    public Foo(ref int val) { 
     _refval = val; // saves the value, not the reference 
    } 
} 

Je pourrais utiliser des pointeurs, mais j'ai besoin d'un contexte non sécurisé.

+0

Si vous avez besoin d'un pointeur vers une ressource non gérée, vous pouvez toujours utiliser le type IntPtr géré qui ne nécessite pas de contexte non sécurisé. –

+0

J'essaie de porter une librairie C++ vers C# dans le Microframework. Ils utilisent des pointeurs pour «lier» les entrées et les sorties d'un contrôleur PID. – chriszero

Répondre

3

Ceci n'est pas possible.

Au lieu de cela, vous pouvez utiliser une classe avec une propriété inscriptible, comme ceci:

class Reference<T> { 
    public T Value { get; set; } 
    public Reference(T value) { Value = value; } 
} 
+0

Les génériques ne sont pas disponibles dans le microframework. Mais la boxe/déballage fonctionne. – chriszero

1

envelopper dans une classe personnalisée, je suppose.

3

Pas d'intérêt, pourquoi est-ce que vous avez besoin de faire ceci? Un entier égal à 5 ​​est égal à un autre entier égal à 5: s'il y a une différenciation que vous voulez faire entre eux, le type de valeur entier ne devrait pas être utilisé - vous voudriez une classe à la place.

Ce n'est pas une réponse directe à votre question, mais comme ils disent que l'amélioration d'un algorithme est meilleure que la mise en œuvre ou l'amélioration d'un mauvais; Peut-être que si vous pouviez nous donner plus de contexte, nous pourrions vous aider avec votre problème/tâche plus général dans son ensemble?

Espérons que ça aide! Pourquoi avez-vous besoin d'enregistrer une référence à un nombre entier?

+0

J'essaie de porter une librairie C++ vers C# dans le Microframework. Ils utilisent des pointeurs pour «lier» les entrées et les sorties d'un contrôleur PID. Donc, ils n'ont pas besoin de passer les variables à chaque boucle – chriszero

+0

Ah je vois; donc vous essayez de remplacer un int *. Si vous vouliez simplement passer en revue le code sans changer d'algorithme, vous feriez bien de conclure, voyez la réponse de SLak. Cependant, il vaudrait mieux ne pas faire passer les choses comme ça, et refactoriser le code. Je ne peux pas penser à un cas où il serait mieux ou même nécessaire de passer un pointeur vers un int comme ça dans un langage OO moderne comme C#. Pensez à utiliser des paramètres 'out', ou une interface qui offre un setter de propriété. N'hésitez pas à poster plus de code et je ferai de mon mieux pour offrir une bonne alternative. –

+0

Eh bien, il devrait s'agir d'un portage d'une bibliothèque PID Ardunio disponible sur http://www.arduino.cc/playground/Code/PIDLibrary. Jetez un oeil sur les constructeurs. – chriszero

Questions connexes