使课程返回字段

时间:2019-06-30 07:07:05

标签: c# class

有没有办法让一个类默认返回其字段之一:

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"

如何进行这项工作?

4 个答案:

答案 0 :(得分:4)

对于所有那些说不可能的人来说,)

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

用法:

TestClass test = new TestClass();
test = "alpha";
Console.WriteLine(test);

礼物:

alpha

注意:由于隐式转换,Console.WriteLinetest作为string并调用Console.WriteLine(string value)重载。

答案 1 :(得分:2)

您不能使“类返回字段”,但是可以覆盖其ToString方法,因此当它以类似Console.Write的形式打印时,您将获得所需的输出:< / p>

public class TestClass
{
    public string Something {get; set;}

    public override string ToString()
    {
        return Somethig;
    }
}

答案 2 :(得分:1)

  

是否有一种方法可以使类默认返回其字段之一?

不。类并非旨在返回任何值。

另一种实现问题的方法是使用get; set;定义属性,例如:

public class TestClass
{
    public string Something  { get; set; }
}

您可以像这样使用

TestClass test = new TestClass();
test.Something = "alpha"; // "alpha" string is assigned to "something"
Console.Write(test.Something); // test returns "alpha" string from "something"

答案 3 :(得分:1)

我更喜欢使用构造函数和重载方法ToString(),这样您将获得一个不可变的对象。

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