项目类型: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()方法是默认会被调用的吗?
各位大神能给小弟解释一下原理不?
C#里所有的类都继承自object类,object有1个方法就是ToString(),所以在C#中任何一个对象或者变量,都可以ToString就是被转成字符串,当你在View上输出时,就是输出为字符串所以他会调用ToString方法
当你string a=model时,他也会自己调用tostring方法,反正就是当在表达式中需要他变成字符串时,他就会自己调用ToString方法
你装Resharper之后如果你这样写 string a= "" + 12.ToString();他会提示你后面的.ToString是没必要的.因为他会自己调用ToString
你是我见过的第二个半路出家但还算专业的....
现在在哪个城市?深圳?
@爱编程的大叔: ````北京``哎呀好痛苦啊```
@爱编程的大叔: 大叔眼光很独到啊,佩服.
翔哥的意思大概是C#会自动去调用对吗?
@吴瑞祥: 北京有北京的好...连痛苦都是好。看看有没有机会混进下一个非死不可,然后等IPO,哈。
在小城市里面,上市那也是上菜市场.......
@爱编程的大叔: 第一个是大叔自己吗?
@晓菜鸟: 不是,那人高中毕业,我才只有小学文化程度。
@晓菜鸟: 没去深究过,真想弄明白,去下个反编译工具,看下他生成IL代码.我猜测应该是string类重载了一些运算符和一些方法内部调用了参数的.tostring方法.
比如@()里面就对传入参数执行了.tostring方法这样,
@晓菜鸟: 任何一个类中的Overridable方法,只要你在子类中Override,然后在子类中调用相关方法,都是调用那个Override的方法。
@爱编程的大叔: 瑞祥也是高中毕业,大叔你更牛,给我解决一下问题呗。
@晓菜鸟: 你哪儿出问题了?
@爱编程的大叔: 任何一个类中的Overridable方法,只要你在子类中Override,然后在子类中调用相关方法,都是调用那个Override的方法。
大叔说的应该是调用子类重写的方法对吗?可是我没有调用那个方法啊!
@爱编程的大叔: 就是感觉搞不清楚原理,瑞祥说是系统默认调用的,我想知道有没有相关的文档,多了解一点,就知道一个是系统默认调用的总感觉有点模糊。
@晓菜鸟: @就是调用了。
@爱编程的大叔: 看来我得去查查@了.
@晓菜鸟: 其实就是瑞祥说的,在一个需要字符串的位置,你放了一个对象,
编译器就会自动进行Object.tostring这样的操作。
@晓菜鸟: 说笑了,@Model应该是一体的
@晓菜鸟: 至于你要原理,确实有点钻牛角了,就是一个约定,如果微软高兴,完全可以再约定
当你在使用数字计算的时候,出现对象,就使用Object.Length....
@爱编程的大叔: 有相关的文档吗?还是想多了解了解,我还是应该多打打基础。
@爱编程的大叔: 被你发现了,我这人确实有点喜欢钻牛角尖,也不知道好还是不好。唉...
@晓菜鸟: 做学问掌握两门技巧,
一是钻牛角尖,二是不求甚解。
至于啥时钻牛角,啥时不求甚解,那得看悟性了。
@爱编程的大叔: 谢谢大叔,只能边走边学,慢慢成长了。
Student stu = new Student() {Name = "博客园", Age = 10000};
Console.WriteLine(stu);
大神,没明白你意思.