日期:2014-05-18  浏览次数:21070 次

console.writeline()没看懂
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication7
{
    class point
    {
        public int x, y;
        public point()
        {
            x = 0;
            y = 0;
        }
        public point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
        public override string ToString()
        {
            return (string.Format("({0},{1})", x, y));
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            point p1 = new point();
            point p2 = new point(5, 3);
          [color=#FF0000]  Console.WriteLine("P1点对应的坐标为{0}", p1);[/color]         
            Console.ReadKey();
        }
    }
}




这里console.writeline("P1点的对应坐标为{0},p1") 为什么就调用了point类下的Tostring方法
关于函数重载我知道De

------解决方案--------------------
Console.WriteLine("P1点对应的坐标为{0}", p1);

控制台输出的是string ,所以会把 p1这个对象先转换为string ,如果你没有重写ToString();
会调用系统其基类ToString() ;
------解决方案--------------------
LZ估计是想知道他为什么自动去调用tostring了吧 这是因为writeline的参数实际上是object类型 内部调用的是object类型的tostring C#学过的都知道任何类都继承自object因此肯定都有tostring方法 这里楼主又重写了object的tostring 也就是说在这边有个多态
可以试下把override关键字改成new 那么调用的将会是基类object的tostring方法 也就是输出类名
------解决方案--------------------
console.writeline在输出字符串的时候,会去调用参数的ToString()方法将参数转换成字符串。
从Object类继承来的对象都会拥有默认的ToString()方法,但是很多时候ToString()之后的字符串会有自己的要求,那么重写ToString()方法可以自定义输出的字符串,可以作一些格式化方面的操作等。
------解决方案--------------------
因为Console.WriteLine这个函数里就是这样写的
------解决方案--------------------
Console.WriteLine 会判断参数类型,如果不是string会尝试调用参数的ToString,如果有ToString方法,则显示输出结果,没有就报错了
------解决方案--------------------
探讨

Console.WriteLine("P1点对应的坐标为{0}", p1);

控制台输出的是string ,所以会把 p1这个对象先转换为string ,如果你没有重写ToString();
会调用系统其基类ToString() ;