- object(System.Object)是所有类型的终极父类
0 所有类型都可向上转换为object
public class Stack
{
int position;
object[] data = new object[10];
public void Push(object obj) {data[position++] = obj;}
public object Pop() {return data[-- position];}
}
Stack stack = new Stack();
stack.Push("sausage");
string s = (string) stack.Pop(); //Downcast, so explicit is needed
Console.WriteLine(s); //sausage
- object是引用类型
- 但值类型可以转化为object,反值依然
- 在值类型和object之间转化的时候,CLR必须执行一些特殊的工作,以弥合值类型和引用类型之间语义上的差异,这个过程就叫做装箱和拆箱
装箱
- 装箱就是把值类型的实例转化为引用类型实例的动作
- 目标引用类型可以是object,也可以是某个接口
int x = 9;
object obj =x; //Box the int
拆箱
拆箱正好相反,把那个对象转化为原来的值类型
int y = (int)obj; // unbox the int
- 拆箱需要显式的转换
装箱会把值类型的实例复制到一个新的对象
拆箱会把这个对象的内容再复制给一个值类型的实例
int i = 3;
object boxed = i;
i = 5;
Console.WriteLine(boxed); //3
GetType 方法与typeof操作符
- 所有C#的类型在运行时都是以System.Type的实例来展现的
- 两种方式可以获得System.Type对象:
- 在实例上调用GetType()方法;
- 在类型名上使用typeof操作符
- GetType是在运行时被算了
- typeof是在编译时被算出
System.Type
System.type 的属性有: 类型的名称, Assembly,基类等
using System;
public class Point {public int X, Y; }
class Test
{
static void Main()
{
Point p = new Point();
Console.WriteLine(p.GetTpye().Name); // Point
Console.WriteLine(typeof(Point).Name); // Point
Console.WriteLine(p.GetType() == typeof(Point); //true
Console.WriteLine(p.X.GetType().Name); //Int32
Console.WriteLine(p.Y.GetType().FullName); //System.Int32
}
}
ToString()
- ToString()方法会返回一个类型实例的默认文本表示
- 所有的内置类型都重写了该方法
int x = 1;
string s = x.ToString(); //s is "1"
- object(System.Object)是所有类型的终极父类
0 所有类型都可向上转换为object
- object(System.Object)是所有类型的终极父类
public class Stack
{
int position;
object[] data = new object[10];
public void Push(object obj) {data[position++] = obj;}
public object Pop() {return data[-- position];}
}
Stack stack = new Stack();
stack.Push("sausage");
string s = (string) stack.Pop(); //Downcast, so explicit is needed
Console.WriteLine(s); //sausage
- object是引用类型
- 但值类型可以转化为object,反值依然
- 在值类型和object之间转化的时候,CLR必须执行一些特殊的工作,以弥合值类型和引用类型之间语义上的差异,这个过程就叫做装箱和拆箱
装箱
- 装箱就是把值类型的实例转化为引用类型实例的动作
- 目标引用类型可以是object,也可以是某个接口
int x = 9;
object obj =x; //Box the int
拆箱
拆箱正好相反,把那个对象转化为原来的值类型
int y = (int)obj; // unbox the int
- 拆箱需要显式的转换
装箱会把值类型的实例复制到一个新的对象
拆箱会把这个对象的内容再复制给一个值类型的实例
int i = 3;
object boxed = i;
i = 5;
Console.WriteLine(boxed); //3
GetType 方法与typeof操作符
- 所有C#的类型在运行时都是以System.Type的实例来展现的
- 两种方式可以获得System.Type对象:
- 在实例上调用GetType()方法;
- 在类型名上使用typeof操作符
- GetType是在运行时被算了
- typeof是在编译时被算出
System.Type
System.type 的属性有: 类型的名称, Assembly,基类等
using System;
public class Point {public int X, Y; }
class Test
{
static void Main()
{
Point p = new Point();
Console.WriteLine(p.GetTpye().Name); // Point
Console.WriteLine(typeof(Point).Name); // Point
Console.WriteLine(p.GetType() == typeof(Point); //true
Console.WriteLine(p.X.GetType().Name); //Int32
Console.WriteLine(p.Y.GetType().FullName); //System.Int32
}
}
ToString()
- ToString()方法会返回一个类型实例的默认文本表示
- 所有的内置类型都重写了该方法
int x = 1;
string s = x.ToString(); //s is "1"
- 可以在自定义的类型上重写ToString()方法
- 如果你不重写该方法,那就会返回该类型的名称
public class Panda
{
public string Name;
public override string ToString() => Name;
}
...
Panda p = new Panda { Name = "Peter" };
Console.WriteLine(p) ; // Peter
网友评论