【问题标题】:Override ToString() in asp.net c#, basics. Doesn'twork在 asp.net c# 中覆盖 ToString(),基础知识。不工作
【发布时间】:2010-01-29 12:54:23
【问题描述】:

您好,我有默认 aspx。 我想测试覆盖默认方法,如 ToString()。 每当我使用 ToString() 时,我认为使用以下代码必须添加“我的文本”;?为什么不呢?

public partial class test : System.Web.UI.Page
{

    public override string ToString()
    {
        return base.ToString() + "my text"; 
    }


    protected void Page_Load(object sender, EventArgs e)
    {

        object test = 3333;
        Response.Write( test.ToString());
    }
}

【问题讨论】:

  • 您可能还想使用 PascalCase 命名您的类。在这里你可以找到一些微软关于如何命名的建议,如果你需要的话:msdn.microsoft.com/en-us/library/xzf533w0%28VS.71%29.aspx
  • 学习/理解oop/c#我觉得可以。
  • 好的,我不确定你要做什么。 Default.aspx 与“像 ToString 这样的默认方法”没有任何关系。它只是一个加载的页面。你在这里的目标是什么?
  • 嗯...我想知道其他人是否理解它。现在经过几个答案,我想知道为什么不能覆盖对象的 ToString() 方法。

标签: c# asp.net overriding tostring


【解决方案1】:

你想打电话

this.ToString();

或者干脆

ToString();

你所做的创建了一个名为 testobject,而不是 test 类型,并调用了 object 的默认 ToString(好吧,在这种情况下是 int)。

或者,如果您想创建另一个类型为 test 的页面:

test newPage = new test();
test.ToString();

【讨论】:

  • 或delcare test mypage = new test();
  • @Nick - 我才刚刚开始。谢谢。
【解决方案2】:

正如大家所说,您覆盖了错误的方法。如果我正确理解您要完成的工作,那么扩展方法可能更合适:

public static class ObjectExtensions
{
    public static string ToCustomString(this object instance)
    {
        return instance.ToString() + "whatever";
    }
}

public partial class test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        object test = 3333;
        Response.Write(test.ToCustomString());
    }
}

【讨论】:

  • +1 因为我认为您了解 OP 想要做什么。
  • 是的,他做到了。所以我明白了,不可能覆盖对象的 ToString() 函数以在我的类中使用相同的 Methodname。
  • 看来问题在于对虚拟方法的错误理解以及如果覆盖它们会发生什么。
  • 我想知道 OP 是否认为将类和局部变量命名为相同(“test”)会很重要。
【解决方案3】:

对象test 不是你的类,它只是一个对象。

【讨论】:

    【解决方案4】:

    我希望你重写你的代码

    protected void TestWrite(object sender, EventArgs e)
    {
        test test = new test();
    
        System.Diagnostics.Trace.Write(test.ToString());
    }
    

    然后写

    protected void TestWrite(object sender, EventArgs e)
    {
        test test = new test();
    
        object testObject = test;
    
        System.Diagnostics.Trace.Write(testObject.ToString());
    }
    

    您将调用被覆盖的 tostring 方法。

    我们在面向对象编程中称之为“动态绑定”。如果您想了解计算机科学中对象的真正含义,请对这个主题充满信心。

    而且...正如 Unsliced 所说:

    “对象测试不是你的班级, 它只是一个对象。”

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 2014-04-16
      • 2018-05-25
      相关资源
      最近更新 更多