C# note 04——class2

  1. 函数传参,对于基本数据类型C#使用值传递,对于Object使用引用传递,因为C# Object的存储是在堆中存对象的数据,在栈中放一个指向堆中数据的引用(指针)。所以可以认为C#的传参时栈中元素的传递。
  2. 默认参数

    与C++一样,默认参数必须是最后的几个连续的参数

    

    下图是不合法的。

    

    与C++不同的是,

    

    C#除了前两种方式,还支持第三种显示传递参数的调用方法。

  3.  Object创建过程与Constructor

    

    先创建对象(分配空间),再调用CLR默认的构造函数(它会按上表初始化所有的类型),如果定义constructor,则调用该constructor,否则直接,

    调用初始化语句初始化Object(即赋值语句,如int time = 300;)

    上一篇中说到,class内声明的class,method,properties都是private,构造函数也不例外。所以构造函数传统的加上public。

    初始化列表会先执行,比如下程序

    调用

    TestExp obj = new TestExp();

  • obj.time的值会是300,而不是30。

    

  4.  Copy Constructor

     C# 没有默认的copy Constructor, 必须手写

    

    ICloneable实现浅拷贝。

    

    实现接口ICloneable,返回值写为Object,返回自带的MemberwiseClone()

    使用时,直接调用便好。

    

  5.  Destructor

    C# 提供垃圾回收器(garbage collection),不许显示的销毁对象。

    析构函数

    显式调用是不合法的,只能在程序结束(而不是函数结束)时会默认调用,其实质是把析构函数中的代码合到基类Object.Finalize()中,并调用该函数。

    

    构造函数,析构函数都不能被继承;析构函数还不能重载,只能有一个;

    析构函数不能带修饰词或参数。

   关于垃圾自动回收机制

    .net垃圾收集器进行垃圾收集的四种时机
    a.最常见的﹕当.net觉得合适时﹐例如它感到内存紧张了(朮语称为﹕0代对象充满)
    b.微软强烈不建议使用的﹕GC的Collect方法调用(就是我们上面用的这种啦﹐因为会降低性能﹐会挂起进程, 等等﹐反正听微软的吧。当然某些时候可以用﹐

      就像我上面用来测试的代码﹐呵呵...)
    c.应用程序域卸载时(AppDomain)
    d.CLR被关闭时(程序运行结束)

    所以,如果一旦你使用完对象你就想调用解构器,你该怎么做?有两个方法:

    调用垃圾搜集器(GC.Collect())来清理。

    实现IDisposable的Dispose方法。

    对于这两种方法参见http://www.cnblogs.com/paper/archive/2009/07/31/1535998.html

    该博客中的程序说明,当调用构造函数时,会先调用父类的构造函数,而析构函数相反,这点与c++类似。

    当出现不可用的对象(没有指针指向)时,并不会马上调用垃圾回收,因为他不满足上四点,但可通过显式调用GC.Collect(),来实现垃圾回收

    using语句与IDisposable

参考http://www.csharpwin.com/csharpspace/151.shtml

 

时间: 2024-11-18 21:21:45

C# note 04——class2的相关文章

精体展矿计运界布属点世据真起验青kPswaoY3w

社保划到税务征收,将大大提升社保费的征管效率.税务的征管能力是目前而言最强的,以后税务征收社保不是代收,属于本职了. 之前税局要把社保信息和交个税的工资比对起来有困难!现在好了,个税是自己的,社保也是自己的,比对困难?不存在的! 这一变革,会给那些不给员工上社保.不全额上社保的企业致命一击! 最新案例 前段时间的发改委关于限制特定严重失信人乘坐民航的一则意见--发改财金[2018]385号,其中还有税务总局的联合署名. http://weibo.com/20180408PP/2309279811

而广除还状么林验以适调半去gbQwsadnbQjN

为了从不同环节,尤其与广大使用人群直接关系的环节反映质量状况,对共享自行车投放点.运营仓库.生产企业等不同环节的产品抽查,覆盖了共享自行车从成品出厂到待投放的关键环节. 该负责人称,根据新车投放情况,结合共享自行车行业市场占有分布特点,本次重点抽查了摩拜.ofo.Hellobike三个品牌的产品,占本次抽查批次总数的83.3%.其中,在天津.无锡.武汉.广州.深圳.东莞6个城市抽查了9批次摩拜产品,占产品抽查批次总数的37.5%,抽查批次合格率88.9%,抽查不合格的1批次产品为待投放于广州市的

Ubuntu16.04 Useing Note

I meet lots of problems when i installed and use ubuntu 16.04.below is my using note: (my operating system is english, so i use english and let this as an exerices.: ) 1. First probelm :   su: Authentication failure Open Terminal Window and input com

ubuntu16.04下安装NS-2.35以及对simple例的理解

本人是在VMWare上安装的ubuntu16.04版本,然后安装NS2.35. 1.下载ns2的安装包,这里我选择的是ns-allinone-2.35.tar.gz压缩格式的all in one安装包,all in one 安装包包含所有的组件,比较方便,另附下载地址: http://www.isi.edu/nsnam/ns/ns-build.html 2.安装前要先进行一些准备工作进行配置环境,输入如下代码: $sudo apt-get install build-essential $sud

<<Python基础教程>>学习笔记 | 第04章 | 字典

第04章:字典 当索引不好用时 Python唯一的内建的映射类型,无序,但都存储在一个特定的键中,键可以使字符,数字,或者是元祖. ------ 字典使用: 表征游戏棋盘的状态,每个键都是由坐标值组成的元祖 存储文件修改的次数,文件名作为键 数字电话/地址薄 函数传递值def func(x,*args,**args): 如果要建公司员工与座机号的列表,如果要获得Alice的座机只能这么找 >>> names   = ['Alice','Bob','Tom'] >>> n

ubuntu14.04基于preseed批量分发环境搭建

1.关闭防火墙 2.PXE环境准备 2.1服务器静态IP设置 sudo vi /etc/network/interfaces 启动eth1网络 sudo ifup eth1 2.2安装服务 2.2.1 安装dnsmasq作为dncp服务 sudo apt-get install dnsmasq 配置dhcp文件 sudo vi /etc/dnsmasq.conf bogus-priv filterwin2k interface=eth1 dhcp-range=10.0.4.100,10.0.4.

VirtualBox中安装Ubuntu12.04/Ubuntu14.04虚拟机

NOTE: 一开始安装的Ubuntu12.04,后来又重新安装了14.04.截图基本使用了安装12.04时的截图,后来安装14.04时又补充了几张.该安装过程对Ubuntu12.04和14.04都是适用的. 1. 选择版本 1.1 Ubuntu桌面版与服务器版的区别 桌面版与服务器版,只要发布版本号一致,这两者从核心来说也就是相同的,唯一的差别在于它们的预期用途.桌面版面向个人电脑使用者,可以进行文字处理.网页浏览.多媒体播放和玩游戏.本质上说,这是一个为普通用户所定制的多用途操作系统.另一方面

Ubuntu14.04下安装Titan X显卡驱动b

现在deep learning这么火,早就想学习学习,最近实验室买了块Titan X显卡,但是目前木有购买相应的服务器,一盘的台式机上带不动这块显卡,而且实验室配置的台式机相当陈旧,配置早已跟不上时代,装上也跑不动. 但是实验室有太工控机,配置还算可以,i7-3770T处理器,所以寻思着把显卡装这台机子上,当然,自带的电源适配器也是带不动的,所以特意买了个1000w的电源,插上显卡总算可以带动. OK,装上Ubuntu14.04,然后参考网上某个教程安装Nvidia官网下载的驱动,跑个网上的de

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 概要  和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码:最后再通过实例来学会使用LinkedList.内容包括:第1部分 LinkedList介绍第2部分 LinkedList数