2010-01-29 8 views
1

Salut j'ai l'aspx par défaut. Je veux tester les méthodes par défaut redéfinies comme ToString(). Chaque fois que j'utilise ToString(), j'ai pensé qu'avec le code suivant, il fallait ajouter "mon texte"; pourquoi pas?Remplacer ToString() dans asp.net C#, notions de base. Doesn'twork

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

... Eh oui ... –

+0

fondamentale Vous pouvez nommer votre classe en utilisant PascalCase aussi. Ici vous pouvez trouver quelques conseils de Microsoft sur la façon de nommer les choses si vous en avez besoin: http://msdn.microsoft.com/en-us/library/xzf533w0%28VS.71%29.aspx –

+0

d'apprentissage/compréhension oop/C# Je pense que oui. –

Répondre

5

Comme tout le monde l'a dit, vous substituez la mauvaise méthode. Si je comprends bien ce que vous essayez d'accomplir, alors peut-être une méthode d'extension est plus approprié:

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

+1 parce que je pense que vous avez compris ce que le PO essaie de faire. – Kobi

+0

Oui, il l'a fait.Donc, je vois, il ne sera pas possible de surcharger la fonction ToString() d'un objet pour l'utiliser avec le même MethodName dans ma classe. –

+1

Il semble que le problème réside dans une mauvaise compréhension des méthodes virtuelles et de ce qui se passe si vous les remplacez. – Thorarin

6

Vous voulez appeler

this.ToString(); 

ou simplement

ToString(); 

Ce que vous avez créé un object avec le nom test, pas le type test et appelé la valeur par défaut ToString de object (bien, de int, dans ce cas).

Alternativement, si vous voulez créer une autre page avec le type test:

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

Ou delcare 'test mypage = nouveau test();' –

+0

@Nick - J'arrivais juste à cela. Merci. – Kobi

1

L'objet test est pas votre classe, il est juste un objet.

0

Je voudrais que vous réécrivez votre code dans

protected void TestWrite(object sender, EventArgs e) 
{ 
    test test = new test(); 

    System.Diagnostics.Trace.Write(test.ToString()); 
} 

puis écrire

protected void TestWrite(object sender, EventArgs e) 
{ 
    test test = new test(); 

    object testObject = test; 

    System.Diagnostics.Trace.Write(testObject.ToString()); 
} 

Vous appelerez toujours la méthode tostring écrasée. Nous l'appelons "liaison dynamique" dans la programmation orientée objet. S'il vous plaît soyez confiant à ce sujet si vous voulez comprendre ce que signifie vraiment un objet en informatique.

Et ... comme dit non tranché:

"Le test d'objet n'est pas votre classe, il est juste un objet."

Bonne chance