zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    按钮组件如何处理点击事件(将原生事件绑定到自定义组件)
    一个简单的transition动画
    根据路由记录(利用matched)动态生成面包屑导航
    assets和static的异同
    Ceph集群概念以及部署
    腾讯质量效能提升最佳实践:智能自动化测试探索和建设
    腾讯WeTest压测大师通过中国计量科学研究院测试认证,获国家级权威认可
    新办公司每年费用
    2
    Leetcode刷题第三题 无重复字符的最长子串
  • 原文地址:https://www.cnblogs.com/CsharpNote/p/4395617.html
Copyright © 2011-2022 走看看