3
votes

Faire en sorte que la classe renvoie un champ

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?


3 commentaires

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 que TestClass ? 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.


4 Réponses :


1
votes

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; }
}

0 commentaires

2
votes

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;
    }
}


1 commentaires

Comment le remplacement de ToString aide-t-il à attribuer une valeur à un champ?



1
votes

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);


1 commentaires

Comment le remplacement de ToString aide-t-il à attribuer une valeur à un champ?



7
votes

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.


0 commentaires