你想了解 C# 程序语言中的类型系统,同样类型系统也关系使用 object 类型作为参数。当一个方法接收一个 object 参数,你可以传递给它任何派生类的实例;因为每个类型都是从 object 类型继承而来,你可以传递任何值到接收 object 参数的方法。在这篇文章中,我们使用 object 类型作为方法的参数来检验 object 类型。
使用 object 类型
这里,我们使用一个程序文本来介绍接收 object 类型参数的方法来演示如何在方法中使用 object 作为参数。在此提醒, object 关键字其实是基础类库 System.Object 类型的别名。下面程序传递直接一个 string 类型到 Test 方法的 object 参数中,并直接分配一个 string 对象到 object 。也可以使用 int 变量作为 object ,甚至可以使用 null 常量作为 object 。
=== 使用 object 类型参数程序 (C#) ===
using System;
class Program{
static void Main(){
// 使用 string 类型作为 object 。
string value = "Dot Net Perls";
Test(value);
Test((object)value);
// 使用 integer 类型作为 object 。
int number = 100;
Test(number);
Test((object)number);
// 使用 null 作为 object 。
Test(null);
Test((object)null);
}
static void Test(object value){
// 测试对象。
// 如果是 string 或 integer 在屏幕上显示他们的值。
Console.WriteLine(value != null);
if (value is string){
Console.WriteLine("String value: {0}", value);
} else if (value is int){
Console.WriteLine("Int value: {0}", value);
}
}
}
=== 程序输出 ===
True
String value: Dot Net Perls
True
String value: Dot Net Perls
True
Int value: 100
True
Int value: 100
False
False
程序文本的概述。这里我们讨论程序的输出。字符串变量分配了指向字符串常量的引用,并将它作为参数传递给 Test 方法。 Test 方法也接受 null 作为它的参数,并使用“ is ”来测试传递给 object 参数的继承类型。开始两句调用 Test 方法用来判断表达式(值是否是 string 类型)是否为真。接下去两句用于匹配(值是否是 int 类型)。同时使用 Console.WriteLine 方法将继承 object 类型的字符串表现形式打印在屏幕上。
更多继承类型作为参数
在 C# 语言中,每个类型逻辑上都是从 object 类型继承而来。实际上,如果你创建一个类并没有指定从哪里继承,隐含着继承 object 类型继承。在面向对象的程序中,类层次结构允许我们通过基类类型引用继承类类型。精确地说,这能够作为传递闭包的概念来描述。
object 参数的形式
在结构化程序语言中,方法签名包括参数列表的格式,参数列表也可能为空。在参数列表中也有可能包含 object 类型的参数,但这可能会引发类型信息丢失。如果你在参数列表中包含了 object 类型,你需要尝试去确定 object 类型的继承类。你可能会用上“ is ”或“ as ”。
对象装箱
在 C# 语言中, object 类型在很多方式是常用的类型,虽然他在执行是有些复杂。例如,由于优化的关系,值类型并没有真正的引发派生堆,并没有在派生堆中,对象不可能真正存在。由于, object 类型在这个例子中可以认为逻辑继承代替物理继承。由于值类型指针的这个缺陷,值类型要作为它的 object 基类类型必须分配一个新的对象。这个称为装箱,相反的过程被称为拆箱。
结束语
在这篇文章中,我们研究了 C# 编程语言中使用 object 类型作为参数。这个程序示例阐明了如何使用 object 类型作为参数,以及在参数列表中如何接受任意类型作为 object 类型。另外,我们注意到作为理解类型的继承,并且具体完成问题关系到值类型执行的关键,例如装箱。