if(o is Employee) { Employee e=(Employee)o; //在if语句剩余的部分中使用e; } Employee e=o as Employee; if(e!=null) { //在if语句中使用e; } as方法简化代码写法,同时提升性能. 为了将一个值类型转换为一个引用类型,可以使用装箱机制.实际发生的是: 1.从托管堆分配内存. 2.值类型的字段复制到新分配的堆内存. 3.返回对象的地址. 拆箱实际就是一个指针获取过程,该指针指向包含在一个对象中的原始值类型…
在日常编码中,很多时候都要编写接受object作为参数的方法,接下来是将这些object转型成特定类型,要么类,要么接口.这时我们有两种选择,使用as操作符,或者使用强制类型转换. 正确的做法是,尽可能使用as操作符,因为相对强制转换来说,as更加安全,也更加高效. 例: object o = Factory.GetObject(); MyType t = o as MyType; if(t != null){ //转换成功 }else{ //转换失败 } 强制转换: object o = Fa…
一:值类型/引用类型的区别      值类型主要包括简单类型,枚举类型,和结构体类型等,值类型的实例通常被分配在线程堆栈上面变量保存的内容是实例数据本身.引用类型被分配在托管堆上,变量保存的是地址.引用类型主要包括类类型,接口类型,委托类型和字符串类型等. 关于参数传递,这里有四种:        值类型参数的按值传递:        引用类型参数按值传递: 关于string引用类型参数按值传递的特殊情况:虽然string类型也是引用类型,然而在按值传递时,传递的实参却不会因方法中形参的改变而被…
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设置>>>>>>>>>>> dynamic_cast提供RTTI(Run-Time Type Information),也就是运行时类型识别.它对编译器有要求,需要编译器启动“运行时类型信息”这一选项.当编译器不开启RTTI时,运行含有dynam…
const_cast也是一个强制类型转换操作符.<C++ Primer>中是这样描述它的: 1.将转换掉表达式的const性质. 2.只有使用const_cast才能将const性质性质转化掉.试图使用其他三种形式的强制转换都会导致编译时的错误.(添加const还可以用其他转换符,如static_const) 3.除了添加const或删除const特性,使用const_cast符来执行其他任何类型的转换都会引起编译错误.(volatile限定符也包括,不过我不怎么了解,本文主要说const)…
static_cast是一个强制类型转换操作符.强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast.dynamic_cast.const_cast.reinterpert_cast四个.本节介绍static_cast操作符. 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float.double与char.enum与int之间的转换等. double a = 1.999; int b = static_cast<double>(a)…
1.用as运算符进行类型转换.因为比起盲目的强制转换它更安全,而且在运行时效率更高. 安全体现在:as操作符就算是转化一个null的引用时,也会安全的返回一个null而不会像强制转换抛出异常. 2.as和is运算符在运行时要检测转换目标的类型.如果一个指定对象不是要求转换的类型,或者它是从要求转换类型那里派生的,转换会失败. 3.as用于引用类型和可为null的类型,不可以用于值类型. 4.在进行值类型强制转换前可以先用is来安全的判断一下数据类型. 注:如果o是其它可转化为整形的类型(译注:但…
构造器 构造器(构造函数)是将类型的实例初始化的特殊方法.构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容. 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化.如果类没有显示定义任何构造器,C#编译器会定义一个默认的无参构造器.相反,如果类中已经显示地定义了一个构造器,那么就不会再生成默认构造器了.定义实例构造器的语法这里就不再多做阐述了(该懂得要懂呀),下面通过一个简单的示例讲述实例构造器的执行原理. public class Rapper { private str…
较量较量(比较操作符) 我们先来做道数学题,数学考试成绩中,小明考了90分,小红考了95分,问谁考的分数高? 答: 因为"95 > 90",所以小红考试成绩高. 其中大于号">" 就是比较操作符,小红考试成绩和小明考试成绩就是操作数,并且是两个操作数. 也就是说两个操作数通过比较操作符进行比较,得到值为真(true)和假(false). 在JavaScript中,这样的比较操作符有很多,这些操作符的含义如下: 看看下面例子: var a = 5;//定义…
http://www.cnblogs.com/JiangSoney/archive/2009/08/07/1541488.html MSDN: https://msdn.microsoft.com/zh-cn/vstudio/cc488006 C#是一种强数据类型语言.(一种总是强制类型定义的语言.如果你有一个整数,如果不显示地进行转换,你不能将其视为 一个字符串.)好的编程习惯提醒我们要尽量避免使用强制转换,但是有的时候我们是无法避免的. 强制转换适用情况:源变量和目标变量兼容.即使这样也存在…
无论何时,正确选择使用as运算符进行类型转换.比盲目的强制类型转换更安全,而且在运行时效率更高. 用as和is进行转换时,并不是对所有用户定义的类型都能完成,只是在运行时类型和目标类型匹配时,转换才能完成. 1.强制转换是不安全的,可能有异常抛出.需要try catch 结构来保证程序运行 2.as转换是安全的,不会有异常抛出,但在转换失败后,其结果为null.as和is运行时,要检测转换目标的类型.如果一个指定对象不是要求转换的类型或者是从转换类型派生的,就会转换失败 注:is 和 as 一样…
31 delete $vertical_alignment{$anonymous};     32 print $vertical_alignment{$anonymous}."\n"; err: Use of uninitialized value in concatenation (.) or string at ./hash_exists_del_func.pl line 32. 31 delete $vertical_alignment{$anonymous};     32…
1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值静态函数的实现里不能使用非静态成员,如非静态变量.非静态函数等 示例: using System; using System.Collections.Generic; using System.Te…
我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型.但是,数据库中的一个列可能允许值为空:用Microsoft .NET Framework处理数据库可能变得相当困难,因为在CLR中,没有办法将一个Int32值表示为null. Microsoft ADO.NET的表适配器确实支持可空类型.但遗憾的是,System.Data.SqlType命名空间中…
Microsoft在CLR中引入了可空值类型(nullable value type)的概念. FCL中定义System.Nullable<T>类如下: [Serializable,StructLayout(LayoutKind.Sequential)] public struct Nullable<T> where T: struct { private Boolean hasValue=false; internal T value=default(T); ………………(略)…
工作几年了才看,记录下笔记备忘. 章节 笔记 1.CLR的执行模型 公共语言运行时(Common Language Runtime,CLR) 源代码-->编译器检查语法和分析源代码-->托管模块(manged module)(含IL代码)-->运行时有JIT编译器生成cpu指令执行 托管模块由PE32|PE32+(64位).CLR头.元数据.IL代码(中间语言运行时转换成CPU指令) 组成 COM组件是一种规范,实现规范的DLL也可称为COM组件 . 托管模块中的元数据描述了模块中定义了…
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组件 在面向对象出现之前,程序是由一系列相互关联的模块和子程序组成,编程采用过程的方式,代码中有一条主线,决定需要完成哪些步骤.后来,面向对象出现了,它是对软件领域的杰出贡献,是软件设计中的里程碑.在软件发展速度远远落后硬件发展速度的时代,它的出现无疑是一种激励.它把程序想象成一系列的相互交互的对象,…
我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型.但是,数据库中的一个列可能允许值为空:用Microsoft .NET Framework处理数据库可能变得相当困难,因为在CLR中,没有办法将一个Int32值表示为null. Microsoft ADO.NET的表适配器确实支持可空类型.但遗憾的是,System.Data.SqlType命名空间中…
C#/.Net/数据库笔试资料C#资料(一)1.静态成员和非静态成员的区别?答:静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值静态函数的实现里不能使用非静态成员,如非静态变量.非静态函数等示例: using System; using System.Collections.Gener…
C#常见的设计模式 一.概要: 模式分为三种,设计模式.体系结构模式与惯用法.其中惯用法是一种语言紧密相关的模式,例如,定界加锁模式其实是一种惯用法. 在C#项目开发过程中,很多情况下您已经使用了某些模式,但或许您并不知道自己所使用的这种解决方案是一种已经被总结归纳的模式. 工厂.策略.桥接.模板方法.代理等等23种Gof经典模式是属于设计模式,设计模式的粒度相对较小,基本上用于提高模块内部的可扩展性和可维护性需求 三层.MVC.IoC/DI等属于体系结构模式,粒度比设计模式大,它是从项目的整体…
我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型.但是,数据库中的一个列可能允许值为空:用Microsoft .NET Framework处理数据库可能变得相当困难,因为在CLR中,没有办法将一个Int32值表示为null. 还有一个例子:在java中,java.util.Date类是一个引用类型,所以该类型的一个变量能设为null.但在CLR中…
下文是100个基本的C#面试问答清单.这些面试问题简单.直接了当,涵盖了C#最基本的概念,大部分和面向对象的概念相关.所以如果你在准备C#面试,我建议你必须掌握这100个基本的C#面试问答来复习你的C#概念.那么现在来看看这100个基本的C#面试问答清单吧.100个面试问答,最近有面试需求的可以看看,理论还是要用于实践,比如参加一场面试:http://t.cn/RZDuuIz 1. 什么是C#? C#(发音”C sharp”)是一种简单.有别于传统的.面向对象.类型安全的编程语言.C和C++程序…
前言 好记性不如烂“笔头”系列... 目录 类型基础 基元类型.引用类型和值类型 类型与成员 常量与字段 方法 类型基础 “运行时”要求每个类型最终都从System.Object 类型派生. 由于所有类型最终都从System.Object 派生,所以可以保证每个类型的每个对象都有一组最基本的方法.具体地说,System.Object 类型提供了下列的公共实例方法: 公共方法名称 说明 Equals 如果两个对象具有相同的值,就返回true. GetHashCode 返回对象的值的一个哈希码. T…
一.类型成员 类成员定义有(public.private.internal.protected). Public--对任何类和成员都是公开的,无限制 Private--是私有的,仅能由类内部代码访问,如果没有声明,默认使用此关键字 Internal--仅能在所属命名空间内部访问 Protected--可以由类或者其派生类中的代码访问 类成员--字段.方法.属性 public class MyClass { ;//字段 public static string MyMain() { return…
作者 陈嘉栋(慕容小匹夫) C#引入了可空值类型的概念.在介绍究竟应该如何使用可空值类型之前,让我们先来看看在基础类库中定义的结构--System.Nullable<T>.以下代码便是System.Nullable<T>的定义: using System; namespace System { using System.Globalization; using System.Reflection; using System.Collections.Generic; using Sy…
摘要: ===操作符: 要是两个值类型不同,返回false 要是两个值都是number类型,并且数值相同,返回true 要是两个值都是stirng,并且两个值的String内容相同,返回true 要是两个值都是true或者都是false,返回true 要是两个值都是指向相同的Object,Arraya或者function,返回true 要是两个值都是null或者都是undefined,返回true ==操作符: 如果两个值具有相同类型,会进行===比较,返回===的比较值 如果两个值不具有相同类…
操作符重载一个原则是:被操作的数据类型中 至少有一个是自定义的类型(使用class定义类),如果被操作的变量都是基本类型,那么就不能定义操作符重载. 1.如果重载了new,则必须重载delete,因为系统知道了你自定义了怎么new一个空间, 但是呢你使用delete的时候,系统并不知道怎么delete你所自定义申请的空间.2.类内定义与友元函数定义原则: 对于二元操作符:二元操作符如果操作符左面是自定义类,那么直接在类里面实现重载函数即可: 如果左边是标准变量(标准变量无法调用重载函数),右边是…
1 类型基础 面试出现频率:基本上肯定出现 重要程度:10/10,身家性命般重要.通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分.连这部分都不清楚的人,可以说根本不知道自己每天都在干什么.就如同你在一个投行面试别人,问他的职业目标是什么,他说,我的职业目标就是进入投行.但你问他投行是做什么的,有什么业务,他却不知道.在你多番追问下,他才老老实实答出来,我的职业目标其实是赚大钱,而投行里边的人,似乎好像都很有钱的样子.而事实却是,投行的后台相对不那么有钱(当然比普通人还是有钱一点).我…
首先祝大家中秋佳节快乐~ 0x00 前言 众所周知的一点是C#语言是一种强调类型的语言,而C#作为Unity3D中的游戏脚本主流语言,在我们的开发工作中能够驾驭好它的这个特点便十分重要.事实上,怎么强调C#的这个特点都不为过,因为它牵涉到编程的很多方面.一个很好的例子便是我们本文要介绍的内容——可空型,它是因何出现的,而它的出现又有什么意义呢?以及如何在Unity3D游戏的开发中使用它呢?那么就请各位读者朋友带着这些疑问,通过下面的文字来寻找这些问题的答案吧. 0x01 如果没有值? 一个了解一…
C# 高效编程笔记1 1.使用属性而不是可访问的数据成员 (1).NET Framework中的数据绑定类仅支持属性,而不支持共有数据成员 (2)属性相比数据成员更容易修改 2.用运行时常量(readonly),而不是编译期常量(const) (1)编译常量支持类型:基本类型,枚举,字符串, 在编译时初始化 (2)运行时常量支持类型:任意类型,构造函数或初始化器中初始化 (3)const在性能上优于readonly,但是readonly的灵活性更佳 3.推荐使用is或as操作符而不是强制类型转换…