想问下Object类的ToString方法是怎么做出来的

q199308040000 2017-04-15 05:39:48
如题,Object是String的父类,但是好像在父类中创建子类对象运行时会出现错误,那么在还没有蛋的时候鸡是怎么出生的?
...全文
113 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sp1234_maJia 2017-04-15
  • 打赏
  • 举报
回复
我再分析说明那个一下吧: 我再举一个例子,比如说写
class A
{
    public string Name;
    public List<A> Children;
}
显然这里就是指一个对象中有一些引用,这些引用指向某些 A 类对象。 类型系统本身就是对象的一种抽象命名,类型本身不存在什么“鸡、蛋”的问题。如此的对象中有个属性是指针集合,你应该先关心数据结构,之后才关心对象的类型命名。 你可以先假设任何对象在混沌时原本都没有类型命名,也并不影响对象的独立存在。命名是为了面向对象系统分析和设计的需要而增加的。因此面向对象的第一个要素是对象的独立且唯一存在性,第二才是分类性(第三是继承,第四是多态)。 对象是独立且唯一存在的。如果你把一个对象按照类型而理解为“String对象里边另外有一个Object对象”那么就会看到鬼怪了、怪力乱神了。一个对象x,它有Object类型,也有String类型,然后Object类型的描述中我们仍然使用了String类型的概念,这就好像说“中国人都是爱国的”,那么到底是先有中国人、后有爱国的人?还是先有爱过的人后有中国人呢?显然这种纠结是不对的。因为“中国人、爱国的人”是两种抽象名词儿,从两个角度来互用地描述概念,不是什么两种人在较劲。
q199308040000 2017-04-15
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
当你创建一本书对象的时候,也许你实际上创建的是一本小人书对象实例,而我“在语言上”只是说创建了一本书,但是你明白、我也明白其实是一本小人书。这时候就相当于
object x = new String(datas);
一样。我们知道这个真是的对象有许多类型,其中 String 类型跟 Object 类型有继承关系。编译器据此帮我们检查程序语法、变量类型声明的兼容性。仅此而已!
谢谢大神,已经理解了,分全给你
  • 打赏
  • 举报
回复
当你创建一本书对象的时候,也许你实际上创建的是一本小人书对象实例,而我“在语言上”只是说创建了一本书,但是你明白、我也明白其实是一本小人书。这时候就相当于
object x = new String(datas);
一样。我们知道这个真是的对象有许多类型,其中 String 类型跟 Object 类型有继承关系。编译器据此帮我们检查程序语法、变量类型声明的兼容性。仅此而已!
  • 打赏
  • 举报
回复
相反相成才能真正成就面向对象分析和设计。所以了解有多少博客、网络文章上是在曲解继承概念,把继承用在了诡异的组合上,把原本应该是组合的东西硬说成是继承,这也很重要。
  • 打赏
  • 举报
回复
什么叫做“父类中创建子类对象”啊?你需要解释一下你理解的意思。 比如说一本教科书“就是“一本书”,那么你创建一本书对象实例,这个对象是书、也是教课书,也是纸制品,也是印刷品,到了废品收购站的系统上说不定所有的书还都同时是废品。 如果你说一本教科书里边另外有一个印刷品,那不就”见了鬼了“嘛。不管叫做书、教科书、纸制品、印刷品,甚至废品,都是指的这一本书(或者说这一个废品),不是什么某个东西肚子里住着另外一个东西。 不理解抽象的人总认为某个子类对象里边另外有一个Object对象,由此才会纠结什么“鸡、蛋”问题。现在说的是同一个东西的两种分类命名,而不是说什么一个是鸡、另一个是蛋。如果你要硬要这样来套用面向对象的继承,那么你必须先硬说每一只鸡就是自己的下的一枚蛋、每一枚蛋就是生自己的那只鸡。 这本身就是荒诞的。“鸡下了蛋”根本不是继承。这样理解继承概念是错误的。

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧