Object reference not set to an instance of on object. --未将对象引用设置到对象的实例
这个耳熟能详的异常提示想必大家都不陌生,这个异常基本上是由于使用了未经实例化的引用对象的实例成员导致的。首先来进行异常信息拆解:
未将(
对象引用
)设置到(
对象的实例
)。
.NET的类型系统主要分为
值类型
和
引用类型
。值类型分配在
线程堆栈(Stack)
上,引用类型分配在
托管堆(Heap)
上。对于引用类型来说又包括两种类型成员:类级别的静态成员和实例级别的实例成员。在使用引用类型的静态成员时,可以直接通过类进行直接调用。而使用实例成员时,我们需要先进行实例化(new 一个对象)。
类型参数:泛型约束
类型对象(Object Type)存储在内存中一个独立的区域,叫加载堆(Load Heap),加载堆是在进程创建的时候创建的,不受GC垃圾回收管制,因此类型对象一经创建就不会被释放的,他的生命周期从AppDomain创建到结束;对象的实例存储在托管堆(GC Heap),托管堆是进程初始化后在进程地址空间上划分的内存空间,存储.NET运行过程中的对象,所有的引用类型(及引用类型包含的成员)都分配在托管堆上,托管堆上分配的对象是由GC来管理和释放的。