回 帖 发 新 帖 刷新版面

主题:关于ToString()和类/访问修饰符的困惑[求助]

本人是菜鸟,刚自学c#没1个星期,遇到了很多困惑...希望论坛的大大们能给我指点迷津.

谢谢了...
偶将在代码的注释上说明自己不理解的地方,希望大家赏脸各抒己见...

代码1:

using System;
using System.Collections.Generic;
using System.Text;
using AliasToMyClass = namespace1.Program;  //创建空间命名的别名

namespace namespace1
{
    class Program
    {
        public override string  ToString()  /* ToString()实现的是什么操作?这里override关键字是什么作用?*/
{
      return "you are in namespace1.Program";
}
    }
}

namespace namespace2
{
    class Program{}
}

namespace namespace3
{
    using namespace1;
    using namespace2;
    class test
    {
        public static void Main()
        {
            AliasToMyClass somevar = new AliasToMyClass();/*Program类的构造函数是Program(),这AliasRoMyClass()又是什么?*/
            /*somevar 貌似是新创建的对象,但下面括号内为什么不是somevar.成员,而直接是somevar?*/
            Console.WriteLine(somevar);/*somevar怎么就知道调用ToString()方法的retrun值?*/
        }
    }
}

类似的代码2:

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

namespace mypoint
{
    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() /*ToString()方法是什么?覆盖?怎么覆盖?*/
        {
            return (String.Format("({0},{1})",x,y));/*String.Format是什么?*/
        }
    }

    class MainClass /*为什么又的另创建一个MsinClass类?一个Ponit类不就能完成吗?这里另创建的好处是什么?*/
    {
        static void Main(string[] args)
        {
            Point p1 = new Point();/*类默认的成员可访问性是private,这里为什么又能调用上一个类创建对象?*/
            Point p2 = new Point(5,3);
            Console.WriteLine("Point #1 at {0}",p1);/*对象p1怎么就知道调用ToString()方法?override关键字联系双方的?*/
            Console.WriteLine("Point #2 at {0}",p2);

        }
    }

}


这两段代码类似,只有些细节不同...所以里面有共同的问题如:ToStrong()方法的问题,也有不同的问题...希望见义勇为的大大们能帮偶指点一二,在下感激涕淋...

回复列表 (共2个回复)

沙发

1、
override代表重载方法,这里代表自己实现ToString方法

2、
由于在开头已经设定了别名,所以可以用别名代替类名Program

3、
WriteLine(object)相当于WriteLine(object.ToString()),这是WriteLine内部实现的机制;也有很多其它方法也类似,因为object铁定会有ToString/Equals等方法

4、
MainClass是执行类,mypoint是数据类,功能分离

5、
“类默认的成员可访问性是private”?
mypoint成员已经设成public了呀~~
另外类的可访问性是internal,不可能是private

板凳

非常感谢 斑竹大大给偶地提示....我一定会去好好的理解的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册