--通用类型系统(CTS)--
通用类型系统(CTS)定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:
–建立一个支持跨语言集成、类型安全和高性能代码执行的框架。
–提供一个支持完整实现多种编程语言的面向对象的模型。
–定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。
--包含的两个类型:值类型(保存的类型就是值本身)(分配到栈上的)与引用类型(保存的地址引用)(分配在堆上的)(.net中系统自动分配的)
引用类型(reference type)总是从托管堆上分配。C#的new 操作符返回的就是对象位于托管堆中的内存地址——该内存地址指向对象占用的数据位。所有的引用类型及值类型均直接或间接继承自Object类型.
值类型实例通常分配在线程的堆栈上,表示值类型实例的变量不包含指向实例的指针——变量本身即包含了实例所有的字段。所有的值类型都继承自System.ValueType类型.System.ValueType类型本身又直接继承自System.Object 类型。值类型不能作为其他引用类型及值类型的基类型
eg:
converterclass.cs程序代码:
using System;
class Class1
{
public int Value = 0;
}
class Test
{
static void Main()
{
int val1 = 0;
int val2 = val1;
val2 = 123;
Class1 ref1 = new Class1();
Class1 ref2 = ref1;
ref2.Value = 123;
Console.WriteLine("Value:{0}, {1}", val1,val2);
Console.WriteLine("Refs: {0}, {1}", ref1.Value, ref2.Value);
Console.ReadLine();
}
}
注: 值类型跟引用类型的区别.
思考
定义自己的类型时,什么情况下应将类型定义为值类型?
Answer:
类型的行为类似于基元类型
类型不需要继承自其他类型
类型不会被任何其他类型继承
类型的实例不会频繁的用于方法的参数传递
类型的实例不会作为方法的结果频繁的返回
类型的实例不会频繁的用于ArrayList及HashTable之类的集合中
--子类跟基类--
子类的实例可以被认为是基类的类型。
object类型是所有类型的通用类型。
类型转换:
扩大转换及收缩转换
显式类型转换
intx = 5;
double y = (double) x;
隐式类型转换
int x = 5;
double y = x;
--System.Convert