首页 新闻 会员 周边

谁能给我解释一下这个原理?

0
[已解决问题] 解决于 2014-08-14 13:10

项目类型:C#  MVC

  我在控制器里面这样写:

public ActionResult Info()
{
      Student stu = new Student() {Name = "博客园", Age = 10000};
      ViewData.Model = stu;
      return View();
}

public class Student
{
      public string Name { get; set; }

      public int Age { get; set; }

      public override string ToString()
      {
          return Name + Age;
      }
}

我在视图里面这样用:

<div>
        <b>@Model</b>
</div>

结果输出的是:博客园10000.

我想知道我重写的ToString()方法是默认会被调用的吗?

各位大神能给小弟解释一下原理不?

晓菜鸟的主页 晓菜鸟 | 老鸟四级 | 园豆:2594
提问于:2014-08-12 16:53
< >
分享
最佳答案
0

C#里所有的类都继承自object类,object有1个方法就是ToString(),所以在C#中任何一个对象或者变量,都可以ToString就是被转成字符串,当你在View上输出时,就是输出为字符串所以他会调用ToString方法

当你string a=model时,他也会自己调用tostring方法,反正就是当在表达式中需要他变成字符串时,他就会自己调用ToString方法

你装Resharper之后如果你这样写    string a= "" + 12.ToString();他会提示你后面的.ToString是没必要的.因为他会自己调用ToString

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2014-08-12 17:09

你是我见过的第二个半路出家但还算专业的....

现在在哪个城市?深圳?

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:13

@爱编程的大叔: ````北京``哎呀好痛苦啊```

吴瑞祥 | 园豆:29449 (高人七级) | 2014-08-12 17:18

@爱编程的大叔: 大叔眼光很独到啊,佩服.

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:21

翔哥的意思大概是C#会自动去调用对吗?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:26

@吴瑞祥: 北京有北京的好...连痛苦都是好。看看有没有机会混进下一个非死不可,然后等IPO,哈。

在小城市里面,上市那也是上菜市场.......

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:28

@爱编程的大叔: 第一个是大叔自己吗?

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:28

@晓菜鸟: 不是,那人高中毕业,我才只有小学文化程度。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:30

@晓菜鸟: 没去深究过,真想弄明白,去下个反编译工具,看下他生成IL代码.我猜测应该是string类重载了一些运算符和一些方法内部调用了参数的.tostring方法.

比如@()里面就对传入参数执行了.tostring方法这样,

吴瑞祥 | 园豆:29449 (高人七级) | 2014-08-12 17:31

@晓菜鸟: 任何一个类中的Overridable方法,只要你在子类中Override,然后在子类中调用相关方法,都是调用那个Override的方法。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:32

@爱编程的大叔: 瑞祥也是高中毕业,大叔你更牛,给我解决一下问题呗。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:33

@晓菜鸟: 你哪儿出问题了?

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:36

@爱编程的大叔: 任何一个类中的Overridable方法,只要你在子类中Override,然后在子类中调用相关方法,都是调用那个Override的方法。

大叔说的应该是调用子类重写的方法对吗?可是我没有调用那个方法啊!

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:37

@爱编程的大叔: 就是感觉搞不清楚原理,瑞祥说是系统默认调用的,我想知道有没有相关的文档,多了解一点,就知道一个是系统默认调用的总感觉有点模糊。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:39

@晓菜鸟: @就是调用了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:40

@爱编程的大叔: 看来我得去查查@了.

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:42

@晓菜鸟: 其实就是瑞祥说的,在一个需要字符串的位置,你放了一个对象,

编译器就会自动进行Object.tostring这样的操作。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:46

@晓菜鸟: 说笑了,@Model应该是一体的

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:46

@晓菜鸟: 至于你要原理,确实有点钻牛角了,就是一个约定,如果微软高兴,完全可以再约定

当你在使用数字计算的时候,出现对象,就使用Object.Length....

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 17:50

@爱编程的大叔: 有相关的文档吗?还是想多了解了解,我还是应该多打打基础。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:52

@爱编程的大叔: 被你发现了,我这人确实有点喜欢钻牛角尖,也不知道好还是不好。唉...

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:54

@晓菜鸟: 做学问掌握两门技巧,

一是钻牛角尖,二是不求甚解。

至于啥时钻牛角,啥时不求甚解,那得看悟性了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-08-12 18:04

@爱编程的大叔: 谢谢大叔,只能边走边学,慢慢成长了。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-13 09:34
其他回答(1)
0

Student stu = new Student() {Name = "博客园", Age = 10000};

Console.WriteLine(stu);

Launcher | 园豆:45045 (高人七级) | 2014-08-12 17:05

大神,没明白你意思.

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-08-12 17:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册