Int32 i = new Int32();
i.ToString();
重定向struct Int32
和.ToString()
的ToString方法有一个override
所以我想检查它在哪里覆盖,所以我创建了一个struct
struct myStruct {}
myStruct my= new myStruct();
my.ToString();
重定向时,我按f12键将其移至public abstract class ValueType
但是我们不能将类继承到结构中
所以问题是我如何得到my.ToString();
?
答案 0 :(得分:3)
所有值类型均隐式地从 System.ValueType 派生。
还值得注意的是(MSDN reference):
ValueType.ToString 方法将覆盖 Object.ToString 方法,并为值类型提供 ToString 方法的默认实现。 (值类型是由C#
中的struct关键字定义的类型。
Struct
和原始类型根据语言设计从ValueType
继承。因此,正是在这种语言之内,我们才能在其上调用ToString()
,因为ValueType
是一个类,并且最终继承自Object
,每种类型都在C#中继承。
例如,如果我们look at the Int type in the c# source code看到它是一个结构,但出于相同的原因,我们可以调用Object
类上可用的方法。
我们总是可以查看这些基类库的源代码。 See the code for ValueType.cs here
答案 1 :(得分:2)
因为它会覆盖Object.ToString
方法。
ValueType使用更适合值类型的实现覆盖Object中的虚拟方法。
MSDN
ValueType.ToString
方法将覆盖Object.ToString
方法 并提供ToString
方法的默认实现 值类型。 (值类型是由struct
关键字定义的类型 C#,以及Visual Basic中的Structure...End Structure
构造。) 在功能上,实现与Object.ToString
:该方法返回完全限定的类型名称。
查看this MSDN文章以了解更多详细信息。
更新(基于OP的评论)
ValueType是抽象类,它是如何做到的
您已经知道,在.NET中,所有内容都是对象,因此Object
是框架中所有其他可用类的基类。每当您创建新类时,都有三种方法可用于覆盖Equals
,GetHashCode
和ToString
,因为该类自动继承自Object
。
在ValueType
的情况下也会发生同样的事情。