Existe-t-il un moyen de faire en sorte qu'une classe renvoie l'un de ses champs par défaut comme celui-ci:
public class TestClass { public string something; } TestClass test = new TestClass(); test = "alpha"; // "alpha" string is assigned to "something" Console.Write(test); // test returns "alpha" string from "something"
Comment faire fonctionner cela?
4 Réponses :
Existe-t-il un moyen de faire en sorte qu'une classe renvoie l'un de ses champs par défaut?
Non. Les classes ne sont pas conçues pour renvoyer une valeur.
Une autre façon d'atteindre ce que vous avez mentionné dans votre question consiste à définir la propriété avec
get; set;
, quelque chose comme:TestClass test = new TestClass(); test.Something = "alpha"; // "alpha" string is assigned to "something" Console.Write(test.Something); // test returns "alpha" string from "something"que vous pouvez utiliser comme:
public class TestClass { public string Something { get; set; } }
Vous ne pouvez pas faire "une classe renvoyer un champ", mais vous pouvez remplacer sa méthode ToString
, donc quand elle est imprimée avec quelque chose comme Console.Write
vous ' obtiendrez le résultat souhaité:
public class TestClass { public string Something {get; set;} public override string ToString() { return Somethig; } }
Comment le remplacement de ToString aide-t-il à attribuer une valeur à un champ?
Je préférerais utiliser le constructeur et la méthode de surcharge ToString (), donc vous obtenez un objet immuable.
public class TestClass { private readonly string something; public TestClass(string something) { this.something = something; } public override string ToString() { return something; } } TestClass test = new TestClass("alpha"); Console.Write(test);
Comment le remplacement de ToString aide-t-il à attribuer une valeur à un champ?
Pour tous ceux qui disent que c'est impossible,)
alpha
Utilisation:
TestClass test = new TestClass(); test = "alpha"; Console.WriteLine(test);
Donne: p>
public class TestClass { public string something; public static implicit operator TestClass(string s) => new TestClass { something = s}; public static implicit operator string(TestClass testClass) => testClass.something; }
Remarque : Console.WriteLine
prend test
comme chaîne
et appelle la surcharge de Console.WriteLine (valeur de chaîne)
grâce à la conversion implicite.
Bien que cela puisse être fait dans une certaine mesure, cela rend votre code très déroutant. Les autres qui le liront penseront probablement "Pourquoi une chaîne peut-elle être affectée à une variable
TestClass
? Qu'est-ce que cela signifie?". Alors, qu'est-ce queTestClass
? Pourquoi veux-tu faire cela?Je peux exécuter exactement ce code en C # (certains mods à la définition de classe) voir .net fiddle < / a> - mais il ne fait pas exactement ce que l'OP demande; o)
Oui, c'est possible < / a>. Cela ne veut pas dire que c'est une bonne idée de l'utiliser dans un cas comme celui-ci.