在代码中我们经常能看到下面这样的语句。

A a = new A();(1)
B b = null;(2)
C c;(3)
代码( 1 )

创建 A 的对象并对其进行初始化。

A :类;

new A() :创建 A 的对象并对其初始化;

a :引用,指向 new A() 这个对象的引用。

注意: a 不是 A 的对象, new A() 才是 A 的对象。

代码( 2 )

声明 引用 b ,并指向 null 。

B :类;

b :引用,指向的对象为 null (空)。

代码( 3 )

与代码( 2 )一样,声明一个 引用 。

与代码( 2 )的区别是:代码( 3 )中 声明 的引用 c 不指向任何对象。

提示:变量本质上是引用的一个别名而已 。

由上面的分析可以了解到,在 C# 中实例化一个对象时,需要经历下面这几步:

声明引用;
使用 new 关键字创建类的对象并对其初始化;(分配内存空间)
将引用指向类的对象。
若没有使用 new关键字 创建类的实例,则仅仅创建引用,指向的对象为 null 。

实例说明

public class ExampleModel
{
public int C1 { get; set; }
public string C2 { get; set; }
}

ExampleModel e1 = new ExampleModel();
ExampleModel e2 = null;
ExampleModel e3;

if (e1 == null)
{
Console.WriteLine("e1 == null");
}
else
{
Console.WriteLine("{ C1 = " + e1.C1 + ", C2 = " + e1.C2 + " }");
}

if (e2 == null)
{
Console.WriteLine("e2 == null");
}
else
{
Console.WriteLine("{ C1 = " + e2.C1 + ", C2 = " + e2.C2 + " }");
}

if (e3 == null)
{
Console.WriteLine("e3 == null");
}
else
{
Console.WriteLine("{ C1 = " + e3.C1 + ", C2 = " + e3.C2 + " }");
} 编译代码,会出现编译错误,提示“使用了未赋值的局部变量 e3 ”,原因是并未对 e3进行初始化,但是使用 e2 变量时并不会产生编译错误,因为 e2 已经被初始化了,只是初始化的值为 null 而已,这并不影响编译的通过。
注释掉e3 部分的代码,运行程序得到下图所示的结果。

在开发过程中,我们还是尽量不要让一个引用指向 null ,否则在运行过程中很容易出现空引用的异常。

修改 e2 部分的代码, 去掉e2是否为空引用的条件判断, 并运行程序。

运行中,会产生“未将对象引用设置到对象的实例。”的异常。(原因你懂的。)

同样去掉 e1 部分中是否为空引用的条件判断语句,再次执行程序,一切正常。(因为e1指向了不为null的对象)

C#对象的声明与实例化的更多相关文章

  1. 使用Delphi对象(声明、实例化、构造、释放)

    一.声明和实例化 在使用一个对象之前,用class关键字声明一个对象.可以在一个程序或单元的type部分声明一个对象类型: type TFooObject = class; 除了声明一个对象类型,通常 ...

  2. Spring学习笔记之 Spring IOC容器(一)之 实例化容器,创建JavaBean对象,控制Bean实例化,setter方式注入,依赖属性的注入,自动装配功能实现自动属性注入

    本节主要内容:       1.实例化Spring容器示例    2.利用Spring容器创建JavaBean对象    3.如何控制Bean实例化    4.利用Spring实现bean属性sett ...

  3. 如何:声明、实例化和使用委托(C# 编程指南)

    委托的声明如下所示: C#   public delegate void Del<T>(T item); public void Notify(int i) { } C#   Del< ...

  4. 【初识Spring】对象(Bean)实例化及属性注入(xml方式)

    title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- #初识S ...

  5. 面向对象+闭包+三种对象的声明方式(字面式、new Object、构造函数、工厂模式、原型模式、混合模式)

    面向对象: 对代码的一种抽象,对外统一提供调用接口的编程思想 对象的属性:事物自身拥有的东西 对象的方法:事物的功能 对象:事物的一个实例 对象的原型:.prototype -> 内存地址 -& ...

  6. Python的类变量和对象变量声明解析

    Python的类和C++一样,也都是存在两种类型的变量,类变量和对象变量!前者由类拥有,被所有对象共享,后者由每个对象独有.这里我主要想讨论一下他们的声明办法. 首先说的是对象变量: 只要是声明在类的 ...

  7. JavaScript面向对象之对象的声明、遍历和存储

    一.对象的声明方式 1. 字面式(json格式)声明对象 var obj={ 属性名:属性值, 方法名:function(){ //函数执行体 } } 2. new 操作符+Object 声明对象 v ...

  8. 【初识Spring】对象(Bean)实例化及属性注入(注解方式)

    通过xml的方式进行对象的实列化或属性注入或许有一些繁琐,所以在开发中常用的方式更多是通过注解的方式实现对象实例化和属性注入的. 开始之前 1.导入相关的包(除了导入基本的包还要导入aop的包): 创 ...

  9. javaScript的函数(Function)对象的声明(@包括函数声明和函数表达式)

    写作缘由: 平时再用js写函数的时候,一般都是以惯例 function fn () {} 的方式来声明一个函数,在阅读一些优秀插件的时候又不免见到 var fn = function () {} 这种 ...

随机推荐

  1. PHP + Redis 实现一个简单的twitter

    原文位于Redis官网http://redis.io/topics/twitter-clone Redis是NoSQL数据库中一个知名数据库,在新浪微博中亦有部署,适合固定数据量的热数据的访问. 作为 ...

  2. JavaScript事件大全

    click() 对象.click() 使对象被点击. closed 对象.closed 对象窗口是否已关闭true/false clearTimeout(对象) 清除已设置的setTimeout对象 ...

  3. [LintCode] Implement Trie 实现字典树

    Implement a trie with insert, search, and startsWith methods. Have you met this question in a real i ...

  4. include动作标记和include指令标记学习笔记

    我的jsp学习参考书是耿祥义,张跃平编著的jsp大学使用教程这本书,我也向大家推荐这本书,我觉得这本书适合我的学习方式,知识的讲解透彻易懂. include指令标记                   ...

  5. Grunt - 前端开发所见即所得

    首先要安装全局的grunt-cli sudo npm install grunt-cli -g 1,项目中初始化npm文件,项目名不要和[关键词]如grunt重复,一直回车即可 npm init 2, ...

  6. SQLHelper 简介

    什么是SQLHelper SqlHelper是一个基于.NETFramework的数据库操作组件.组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类 ...

  7. SecureCRT的相关问题

    1. 中文显示乱码的解决方法 2. 显示Linux中的颜色信息 3. 解决终端长时间无输入导致SSH连接中断的问题 4. 以公钥方式代替密码方式登录服务器 在SecureCRT中创建Public Ke ...

  8. li标签行内元素高度及居中

    <head> <title><title> <style type="text/css"> * { padding: 0px; ma ...

  9. python aes加解密

    python AES加密解密 python AES 双向对称加密解密 Python中进行Base64编码和解码 # encoding:utf-8 import base64 from Crypto.C ...

  10. FAQ&ubuntu12.04 gedit 打开 txt 文件乱码

    ubuntu12.04 gedit 打开 windows 分区中的 txt 文件乱码,是因为 ubuntu 和 windows 两个系统的编码不同.解决办法:终端里依次输入以下2 条命令即可: 代码: ...