.Net 零星小知识
1. 深拷贝和浅拷贝
单纯讲这两个词,其实不容易记住区别,但是看看他们对应的英语单词就显而易见了:
深拷贝: Clone
浅拷贝: Copy
记住了这个,下面在看看详细一点的信息:
Copy: 只是复制了一个引用,就像object类型的复制,我们用
Object a = New Object();
Object b = a; //b is a copy of a
这里b就是a的copy,b==a 会返回true;
而clone就是照着模特完全造一个一模一样的出来,这时需要实现ICloneable.Clone方法。
ICloneable a = New CloneableObject();
ICloneable b = a.Clone(); //b is cloned from a
这时候b==a会返回false。
2. lock的用法
lock(new object()) //这里一定要给引用类型变量
{
object a = new object ();
}
当然,如果你真按上面这个写法去写,这段代码没有任何同步效果,它每次都会试图锁一个全新的不同的对象,这一定会成功。
3. Object 与 object
Object 是一个类,碰巧这个类是.Net里所有类的基类,它就是盘古。这个类这么特殊,那我们给他一个关键字好了,那就叫object吧。
4. 装箱和拆箱
一个经典的装箱拆箱案例:
static void Main(string[] args)
{
ValueTypeT t = new ValueTypeT();
t.a = ;
Object o = t; //boxing
((ValueTypeT)o).SetA(); //unboxing, t.a is not set.
Console.ReadKey();
} public struct ValueTypeT
{
public int a; internal void SetA(int p)
{
this.a = p;
}
}
在装箱的时候,o.a的值是从t copy过来的,当需要调用SetA方法的时候,需要拆箱,将o 完全拆出来,然后就跟o没有关系了,这是调用了这个结构体的SetA方法,已经与o完全没有关系了,所以o的值不变。如下有示意图:
.Net 零星小知识的更多相关文章
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- Unix系统小知识(转)
Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...
- salesforce 零基础开发入门学习(十)IDE便捷小知识
在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...
- Jquery:小知识;
Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器 上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...
- HTML小知识---Label
今天知道了一个html小知识: <input type="checkbox" id="chkVersion" /> ...
- Unicode和汉字编码小知识
Unicode和汉字编码小知识 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的 ...
- Java异常的一个小知识
有以下两个代码: package com.lk.A; public class Test3 { public static void main(String[] args) { try { int a ...
随机推荐
- 通过一道笔试题浅谈javascript中的promise对象
因为前几天做了一个promise对象捕获错误的面试题目,所以这几天又重温了一下promise对象.现在借这道题来分享下一些很基础的知识点. 下面是一个面试题目,三个promise对象捕获错误的例子,返 ...
- CentOS linux下安装和配置Apache+SVN(用浏览器http方式访问SVN目录)
在CentOS linux下安装SVN,我们可以进行以下步骤: 第一步:安装CentOS Linux操作系统,并在CentOS安装进行的同时,自定义安装这一步,一定要勾选Subversion(在“开发 ...
- QBC
c.add(Restrictions.sqlRestriction("exists (SELECT p.loan_contract_no FROM crf_p2p_app_info p WH ...
- Java陷阱之assert关键字
Java陷阱之assert关键字 一.概述 在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多. 二.语法 在J ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- onethink连接操作 sqlite 数据库
直接上干货:一个简单的demo onthink本身已经有sqlite数据库的驱动 不需要在下载 common下面的config文件: 'SQLITE'=> array( 'DB_TYPE' =& ...
- J2EE应用监控后台执行SQL
我们可能已经很熟悉在未使用数据库连接池的hibernate的环境下,配置p6spy和sql profiler.这在单独使用hibernate,以及项目初期是有效的.但是,在真实的开发环境下,往往是项目 ...
- 监听JVM的几个命令(可用于linux 本机)
1. jstat 这个命令对于查看Jvm的堆栈信息很有用.能够查看eden,survivor,old,perm等heap的capacity,utility信息 对于查看系统是不是有能存泄漏以及参数设置 ...
- JS定时程序,设定一个一直刷新,又时间间隔的js,读取当前的时间并显示
<!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...
- mysql 忘记root 密码的解决方法
LINUX 1.切换root 用户 2.停止mysqld 服务 /etc/inid.d mysqld stop 3.跳过验证登录 mysqld_safe --skip-grant-tables &am ...