struct tostring()方法重定向到抽象类ValueType

时间:2019-02-14 05:55:33

标签: c# .net

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();

2 个答案:

答案 0 :(得分:3)

FROM MSDN:

  

所有值类型均隐式地从 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是框架中所有其他可用类的基类。每当您创建新类时,都有三种方法可用于覆盖EqualsGetHashCodeToString,因为该类自动继承自Object。 在ValueType的情况下也会发生同样的事情。