重写asp.net c#中的ToString(),基础知识。不';网络

重写asp.net c#中的ToString(),基础知识。不';网络,c#,asp.net,overriding,tostring,C#,Asp.net,Overriding,Tostring,嗨,我有默认的aspx。 我想测试覆盖默认方法,比如ToString()。 每当我使用ToString()时,我想下面的代码必须添加“我的文本”;?为什么不呢 public partial class test : System.Web.UI.Page { public override string ToString() { return base.ToString() + "my text"; } protected void Page

嗨,我有默认的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());
    }
}
你想打电话吗

this.ToString();
或者干脆

ToString();
您所做的是创建了一个名为
test
对象,而不是类型
test
,并将
对象的默认
ToString
(在本例中是
int

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

test newPage = new test();
test.ToString();
你想打电话吗

this.ToString();
或者干脆

ToString();
您所做的是创建了一个名为
test
对象,而不是类型
test
,并将
对象的默认
ToString
(在本例中是
int

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

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

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

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

正如大家所说,您覆盖了错误的方法。如果我正确理解了您试图实现的目标,那么扩展方法可能更合适:

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

正如大家所说的,您正在覆盖错误的方法。如果我正确理解了您试图实现的目标,那么扩展方法可能更合适:

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

我想让你重写你的代码

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方法

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

而且。。。正如无执照者所说:

“对象测试不是你的类, 它只是一个物体。”


祝你好运

我希望你用

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方法

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

而且。。。正如无执照者所说:

“对象测试不是你的类, 它只是一个物体。”



祝你好运

或delcare
test mypage=new test()@Nick-我刚开始。谢谢。或者delcare
test mypage=new test()@Nick-我刚开始。谢谢。你也可以用PascalCase来命名你的班级。在这里,你可以找到一些微软的建议,如果你需要的话,如何命名:学习/理解oop/c,我想是的。好吧,我不知道你想做什么
Default.aspx
与“像ToString这样的默认方法”无关。这只是一个加载的页面。你的目标是什么?嗯。。。我想知道其他人是否理解这一点。现在,在回答了几个问题之后,我不知道为什么不可能重写对象的ToString()方法。您可能也想使用PascalCase命名您的类。在这里,你可以找到一些微软的建议,如果你需要的话,如何命名:学习/理解oop/c,我想是的。好吧,我不知道你想做什么
Default.aspx
与“像ToString这样的默认方法”无关。这只是一个加载的页面。你的目标是什么?嗯。。。我想知道其他人是否理解这一点。现在,在回答了几个问题之后,我不知道为什么不可能重写对象的ToString()方法。+1,因为我认为您理解OP试图做什么。是的,他做到了。因此,我明白了,在我的类中,不可能重写对象的ToString()函数以使用相同的Methodname。问题似乎是对虚拟方法的理解不正确,以及如果重写它们会发生什么。我想知道OP是否认为将类和局部变量命名为相同的(“test”)重要的是+1因为我想你明白OP想要做什么。是的,他做到了。因此,我明白了,在我的类中,不可能重写对象的ToString()函数以使用相同的Methodname。问题似乎是对虚拟方法的理解不正确,以及如果重写它们会发生什么。我想知道OP是否认为将类和局部变量命名为同一个(“test”)很重要。