有没有办法设置在请求变量时返回的内容?

时间:2011-03-04 10:31:08

标签: c#

喂,

例如,如果我有:

public class Fu
{
    int _bar;


    public Fu(){
        _bar = 12;
    }

    public void Square(){
        _bar *= _bar;
    }
}

(顺便说一句,这只是一个例子,我知道这是做我正在做的事情最糟糕的方式。)

无论如何我可以去:

Fu _fu = new Fu();
_fu.Square();
Console.WriteLine(_fu);

和_fu返回144而不是类Fu?或者这只是一个荒谬的问题?

此致 哈罗德

编辑: Console.WriteLine(_fu);是一个糟糕的例子。如果我想int twelveCubed = 12 * _fu怎么办?

6 个答案:

答案 0 :(得分:6)

Console.WriteLine必须将对象转换为字符串才能打印出来;默认实现使用类型的名称,但您可以覆盖它:

public override string ToString() { return _bar.ToString(); }

或if(comment)您想要转换运算符:

public static implicit operator int(Fu fu) { return fu._bar; }

答案 1 :(得分:3)

在Fu类中添加此方法

 public override string ToString()
 {
     return _bar.ToString();
 }

答案 2 :(得分:1)

您需要覆盖ToString方法

public class Fu
{
    int _bar;


    public Fu()
    {
        _bar = 12;
    }

    public void Square()
    {
        _bar *= _bar;
    }

    public override string ToString()
    {
        return _bar.ToString();
    }
}

如果您想自动转换为int值,可以创建一个强制转换运算符

public class Fu
{
    int _bar;


    public Fu()
    {
        _bar = 12;
    }

    public void Square()
    {
        _bar *= _bar;
    }

    public static implicit operator int(Fu f)
    {
        return f._bar;
    }
}

并像这样使用

Fu _fu = new Fu();
_fu.Square();
int intVal = _fu;
Console.WriteLine(intVal);

答案 3 :(得分:1)

我怀疑您正在寻找implicit operator overloading,它允许您实现提供用户定义类型转换的运算符。在这种情况下,您可以在Fu类和类型int之间定义隐式转换,其中类Fu的实例的行为与int类型的值完全相同

例如,将以下方法添加到您的类中将使您的代码完全按照建议运行:

public static implicit operator int(Fu fu)
{
   return fu._bar;
}

我建议你在实现这样的功能时非常小心!它们通常会让您的类的消费者感到困惑,并且当转换被保证不会导致数据丢失时,才能实现。

答案 4 :(得分:0)

C#与旧的Visual Basic不同,其中控件具有DefaultProperty的概念,所以

MsgBox(TextBox1)

与:

完全相同
MsgBox(TextBox1.Text)
在我看来,你所要求的内容并没有多大意义,如果它确实有效,我仍然不会使用它。我们如何指定应返回的内容以及如果我们更改类实现然后在没有编译时错误的情况下中断所有内容?!

答案 5 :(得分:0)

必须明确排队,提供更多详情?

反正

为什么不尝试类的属性。

 public class Fu
{
   private int _bar;
    public Fu()
    {
        _bar = 12;
    }
    public void Square()
    {
       _bar *=_bar;
    }
    public override string ToString()
    {
        return _bar.ToString();
    }
}

并将其称为

       Fu fu = new Fu();
        fu.Square();
        Console.WriteLine(fu);