问题在下图中,另外在图后我附上代码,供大家调试..
using System; class Person { public string Name{get;set;} } class Student : Person { //public string SchoolName { get; set; } } class Test { static void Main() { //Person p = new Person { Name = "Jim" }; //Student s = (Student)p; //Console.WriteLine(s.Name); object t = 2; int i=(int)t; Console.WriteLine(i); } }
这个怎么能一样呢 object t = 2; int i=(int)t; 这个 是装箱 和 拆箱。
你那个 只能是 子类转父类
谁告诉你int继承自object的?
object是所有类的祖先啊,老师说的
@hexllo: 那你是认为int是一个类了?
@顾晓北: 唉..看了一下,int是个结构,Int32...
所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
@焚寂: 我只看到这些:
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>
@hexllo:
类、结构、枚举都直接或间接继承自 System.Object。
@顾晓北:
参见:MSDN => 结构(C# 编程指南)
《C#语言规范》 => 结构
@焚寂: 看了下,所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
是这样的,但是如果是这样的话,有两个问题:
1.Int32为什么没看到所继承的这个System.ValueType?
2.那这不是说所有都是类?如果这样还分什么值类型,引用类型?Object肯定是引用类型吧?那也就没有所谓的装箱拆箱了。
t=2时确实可以正常编译,但是t=‘a’ 时也是会会异常啊。父类是不能转化成子类的。
object t = 2;
int i=(int)t;
这是装箱、拆箱,跟继承没关系。