美文网首页
C# object类型

C# object类型

作者: 柒轩轩轩轩 | 来源:发表于2019-09-30 23:39 被阅读0次
  • 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对象:
  1. 在实例上调用GetType()方法;
  2. 在类型名上使用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
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对象:
  1. 在实例上调用GetType()方法;
  2. 在类型名上使用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

相关文章

  • C#之托管与非托管资源

    C#中的数据类型 C#中的所有类型都是(直接或间接)从System.Object类型派生的。C#的类型被分成两大类...

  • C# 对象基础

    对象(Object)类型 是 C# 通用类型系统中所有数据类型的终极基类。所以对象(Object)类型可以被分配任...

  • C# Object 类型

    声明 本文内容来自微软 MVP solenovex 的视频教程——真会C#?- 第3章 创建类型,大致和第 7 课...

  • C# object类型

    object(System.Object)是所有类型的终极父类0 所有类型都可向上转换为object object...

  • 2018年9月6日.NET笔试面试题

    什么是装箱(boxing)和拆箱(unboxing)?C#中值类型和引用类型的最终基类都是Object类型(它本身...

  • C#零碎知识点(三)

    1、装箱拆箱C#中所有类型都继承于System.Object类型,所有的值类型都继承于System.ValueTy...

  • C#(13.5)面向对象 知识点*

    【知识点】 (泛型)在C#中,任何一个类型直接或者间接继承于Object。 * 值类型和引用类型的存储位置 ...

  • Unity常见面试题(一)

    1. [C#语言基础]请简述拆箱和装箱。 答: 装箱操作: 值类型隐式转换为object类型或由此值类型实现的任何...

  • C# 中as和is的用法

    在程序中,进行类型转换时常见的事,C#支持基本的强制类型转换方法,例如 Object obj1 = new New...

  • C#(20)泛型

    9yue5 在C#中,任何一个类型直接或者间接继承于Object。 泛型 Generic 定义:泛型能够将类型作为...

网友评论

      本文标题:C# object类型

      本文链接:https://www.haomeiwen.com/subject/zicvuctx.html