无法调用重写的toString()

时间:2013-11-14 08:38:16

标签: c#

我刚开始用c# 我想用参数覆盖toString()方法。我这样做:

    public string ToString(bool param)
    {
        if (param)
        {
            return string.Format(FIO);
        }
        else
        {
            return string.Format(Address);
        }
    }

并称之为:

myClass.toString(true);

但是得到错误:

method toString() has 0 parameters but invoked with 1 argument.

什么可能是错的?

5 个答案:

答案 0 :(得分:2)

鉴于此课程:

class MyClass
{
    public string ToString(bool param)
    {
        return param.ToString();
    }
}

此代码将按预期工作:

MyClass myClass = new MyClass();
string s = myClass.ToString(true);

因此,您未向我们展示的部分代码中存在错误。

的可能性:

方法名称中的错字? 使用错误的类?

答案 1 :(得分:1)

C#区分大小写。你的方法是“ToString”,但你正在调用“toString”

更改

myClass.toString(true);

myClass.ToString(true); // <-- capital T

答案 2 :(得分:0)

要覆盖 - 您需要使用override关键字。但是,您无法覆盖默认的ToString()方法,因为它是无参数的,因此您无法“修改”它以添加参数,因此您需要创建另一个方法。

但是你的例子无论如何都不起作用。 C#区分大小写,因此您需要调用:

myClass.ToString(true)

NOT:

myClass.toString(true)

答案 3 :(得分:0)

错误告诉你究竟出了什么问题。

当覆盖某个方法(错过了“覆盖”)关键字时,您必须保留参数。所以你可以覆盖.ToString(),但不能覆盖.ToString(bool something)

你肯定希望获得与.ToString()完全不同的东西 - 方法我只是建议编写一个完整的自己的方法而不是覆盖

我的建议是:

public override string ToString() {
   return string.Format(Address);
} 
public string ToStringParam() {
   return string.format(FIO);
}

答案 4 :(得分:0)

我认为您使用的是基类中错误的ToString。由于某种原因,编译器找不到正确的字符串;也许你正在某个地方投射物体。

对于这个问题;我建议你使用扩展方法:

namespace ExtensionMethods
{
  public static class MyExtensions
  {

    // I DONOT KNOW YOUR OBJECT TYPE I JUST HAVE USED A DUMMY THING; YOU CAN REPLACE IT!!!!
    public static string ToString(this MyType myClass, bool param)
    {
          if (param)
          {
             return string.Format(myClass.FIO);
          }

             return string.Format(myClass.Address);
     }
   }   
}