J'ai une classe simple avec quelques propriétés privées et 2 propriétés publiques (valeur et type). J'essaie de trouver un moyen d'appeler l'objet pour qu'il renvoie sa propriété value sans avoir à appeler obj.value. Je ne pense pas que ce soit possible.Puis-je accéder à une propriété d'objet avec le nom de l'objet en C#?
Voici ce que je pense:
public class myclass {
private int property1;
private int property2;
public string value;
public string type;
public myclass(int property1, int property2, string value, string type)
{
this.property1 = property1;
this.property2 = property2;
this.value = value;
this.type = type;
}
}
var obj = new myclass(1, 2, "abc", "string");
console.write(obj.value); // returns abc
console.write(obj.type); // returns string
console.write(obj); // expecting abc
Est-il possible de la dernière ligne retourne abc avec cette syntaxe?
Vous demandez pourquoi je veux réaliser quelque chose comme ça? Je construis un service avec un module de programmation Javascript. Les objets sont des variables et je veux que les utilisateurs y accèdent en écrivant simplement obj au lieu de obj.value. J'ai besoin de ce comportement en C# (et non Javascript) car le Javascript rappelle les objets backend. Si je n'avais pas à garder les propriétés privées, ce serait facile, mais je dois les avoir.
MISE À JOUR: Pour être plus clair: cette classe doit être appelé par un interpréteur JavaScript (Jint dans ce cas) et la classe doit mettre à jour la base de données si sa valeur est mise à jour, de sorte que la nécessité de les propriétés privées. Voici mon code actuel:
public class SmartNumeric : ISmartVariable
{
private Boolean _simulation;
private Guid UserId;
private long userKeyId;
private long variableKeyId;
private string Name;
public string type
{
get {
return "numeric";
}
}
private float _value;
public float value
{
get {
return _value;
}
set {
_value = value;
if (!_simulation)
new SmartCommon().SetValue(userKeyId, variableKeyId, value.ToString());
}
}
public SmartNumeric(Guid UserId, long userKeyId, long variableKeyId, string Name, float value, Boolean simulation)
{
this.Name = Name;
this._value = value;
this.UserId = UserId;
this.userKeyId = userKeyId;
this.variableKeyId = variableKeyId;
this._simulation = simulation;
}
}
Ainsi, par exemple, un utilisateur va écrire son propre script comme
a = 45;
qui est plus naturel en Javascript que
a.value = 45;
où se réfère à un objet SmartNumeric en C#. L'objet reçoit une mise à jour et c'est là que j'ai besoin de revenir à la base de données pour mettre à jour la valeur et avoir besoin des propriétés supplémentaires.
Pourquoi avez-vous besoin d'avoir ce comportement? Il y a de fortes chances que vous adoptiez la mauvaise approche pour ce que vous devez accomplir. –
Ce que vous demandez n'a pas de sens.Pensez à ce que les implications seraient. Cela signifie que vous ne pourrez jamais affecter 'obj' à une autre variable. par exemple. 'var obj2 = obj;' assignerait réellement 'obj.value' à' obj2'. En fait, toute expression qui fait référence à 'obj' se référerait plutôt à' obj.value'. Donc, vous ne serez jamais capable de manipuler 'obj 'du tout. – RJM
Je comprends que cela n'a pas de sens mais je me demandais si un sorcier en C# pouvait trouver un truc magique d'accesseur ou quelque chose du genre. La façon la plus simple d'aborder cela est de créer un objet simple (une chaîne) mais de trouver un moyen d'y associer d'autres valeurs. Je ne peux pas simplement utiliser un tableau séparé pour garder ces propriétés parce que quand j'accède à l'objet je n'ai pas accès à ce tableau ... – pdube