引用类型

面试宝典

落花浮王杯 提交于 2019-11-27 03:25:16
目录: 值类型和引用类型的区别 装箱拆箱(强类型 弱类型) C# 四大基本方法:tostring() equals() gethashcode() gettype() 泛型(安全性 为什么效率高) 接口和类区别 抽象类(方法)和虚类(方法)的区别 了解下.Net framework Const和Readonly 父类与子类之间的关系 继承 重写 重载 单例模式 实际编程用的较多 序列化和反序列化 CLR (概念 核心功能) Asp.net页面传值的几种方式 Dataset和Datareader的区别 RequireJs 对象获取类型 WCF 三要素 绑定方式 应用程序域 如何处理异常 haveing groupby Varchar nvarchar区别 常用的字符串函数(网上搜下) 谈谈final, finally, finalize的区别 了解三层架构 mvc ADO.NET 数据库连接常用的几个类型 C# : 值类型和引用类型的区别 值类型和引用类型理解透彻后,我们知道C#里面是值传递,但是有些变量是引用类型的,在传递和拷贝时需要特别注意。方法传递参数时加上ref(out),为引用传递参数。 值传递仅仅传递的是值,不影响原始值。 引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。 值类型 : 原类型 (Sbyte、Byte、Short、Ushort、Int、Uint

Java--基础阶段--2Java基本语法-2.6数组

ⅰ亾dé卋堺 提交于 2019-11-27 03:22:30
数组是多个 相同类型 数据的组合,实现对这些数据的统一管理 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型 数组属 引用类型 ,数组型数据是 对象(object) ,数组中的每个元素相当于该对象的成员变量 一、一维数组声明 1.一维数组的 声明方式 :   type var[] 或 type[] var; 例如: int a[]; int[] a1; double b[]; Mydate[] c; //对象数组 Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法 2.一维数组初始化 动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行 int[] arr = new int[3]; arr[0] = 3; arr[1] = 9; arr[2] = 8; MyDate dates[]; dates = new MyDate[3]; dates[0] = new MyDate(22, 7, 1964); dates[1] = new MyDate(1, 1, 2000); dates[2] = new MyDate(22, 12, 1964); 静态初始化:在定义数组的同时就为数组元素分配空间并赋值。 int a[] = new int[]{ 3, 9, 8}; int[] a = {3,9,8}; MyDate

流程控制和数组

好久不见. 提交于 2019-11-27 02:45:26
流程控制 break结束多重循环 public static void main(String[] args) { outer: for(int i = 0; i < 5; i++) { for(int j = 0; j < 3; j++) { System.out.println("i的值为:" + i + " j的值为:" + j); if(j == 1) { break outer; } } } } //输出: //i的值为:0 j的值为:0 //i的值为:0 j的值为:1 当运行到 break outer; 时,直接结束 outer 这个标签标识的循环。 Contine忽略多重循环 public static void main(String[] args) { outer: for(int i = 0; i < 5; i++) { for(int j = 0; j < 3; j++) { System.out.println("i的值为:" + i + " j的值为:" + j); if(j == 1) { continue outer; } } } } //输出 /* i的值为:0 j的值为:0 i的值为:0 j的值为:1 i的值为:1 j的值为:0 i的值为:1 j的值为:1 i的值为:2 j的值为:0 i的值为:2 j的值为:1 i的值为:3 j的值为:0 i的值为

C# 值类型 与 引用类型

寵の児 提交于 2019-11-27 01:29:27
1、C# 是纯OO语言,Object 是所有类型的根。 2、Object 建立了一个分支ValueType,ValueType继承Object,本身是class,是引用类型。 3、ValueType 是所有值类型的根,值类型包括结构和枚举类型,结构包括BCL的结构(基础类型)和自定义的结构。 4、所有的结构直接继承ValueType,并且是隐式的继承。 4、枚举类型间接继承ValueType,枚举类型直接继承Enum,Enum继承ValueType,Enum是class,是引用类型。也就是说,Enum和枚举类型不是同一个概念,可以认为枚举类型是Enum的子类,隐式继承。 5、引用类型包括类、接口、委托、数组、string等。 6、值类型的使用场景(这里的值类型主要是指结构):小对象,只表现数据,不包含复杂的业务逻辑,不表现抽象和多级别的层次结构。 转载于:https://www.cnblogs.com/nzbbody/archive/2012/01/17/2324897.html 来源: https://blog.csdn.net/weixin_30420305/article/details/99234325

栈 与 堆

我与影子孤独终老i 提交于 2019-11-27 01:29:13
1、使用场景:栈记录代码执行的路径;堆保存引用类型的实例。 2、栈自行维护,一个步骤执行完,自动从栈顶弹出;堆需要GC来进行垃圾回收。 3、数据可以分为四类:值类型、引用类型、引用、指令。其中,引用是指类型为引用类型的变量,指令是指一个一个的操作。 4、内存分配:引用类型总是分配在堆上;值类型和引用总是分配在它们被声明的地方;指令总是分配在栈上。 5、值类型在赋值或者参数传递时,总是“整体拷贝”;引用类型在赋值或者参数传递时,总是“复制引用”。如果要想让值类型具备“复制引用”的特点,需要使用ref 关键词。如果要让引用类型具备“整体拷贝”的特点,需要让引用类型 ICloneable接口,实现接口中的方法Clone 转载于:https://www.cnblogs.com/nzbbody/archive/2012/01/18/2325240.html 来源: https://blog.csdn.net/weixin_30608131/article/details/99234333

C# 值类型 与 引用类型

故事扮演 提交于 2019-11-27 01:28:26
先看MSDN上对CTS 中的值类型和引用类型之间的关系的介绍: 1、Object是所有类型的根,类型分为:值类型和引用类型。 2、ValueType 是所有值类型的根(结构是隐式继承ValueType),值类型分为:结构和枚举。结构包括:BCL中的结构(也就是基础类型Primitive Type)和自定义的结构。 3、ValueType 继承Object,ValueType本身是个class(引用类型),而ValueType的子类(结构和枚举)都是值类型,ValueType重写了Object的Equals方法,将引用的比较转化为引用内容的比较。 4、所有的值类型都是sealed 转载于:https://www.cnblogs.com/nzbbody/archive/2012/01/10/2318279.html 来源: https://blog.csdn.net/weixin_30214115/article/details/99234361

C# 值类型 VS 引用类型

早过忘川 提交于 2019-11-27 01:28:24
值类型: 1、值类型在栈上分配内存 2、值类型超出作用范围,从栈上弹出,自动释放内存 3、值类型包括两类:结构和枚举,结构包括BCL中的结构和自定义的结构。BCL中的结构也就是基础类型(Primitive Type),包括: 整形(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong) 浮点型(Float、Double) decimal bool 4、值类型赋值或者通过方法传递参数是 “整体拷贝” 引用类型: 1、引用类型在堆上分配内存 2、GC管理堆上的引用类型 3、引用类型包括类、接口、委托、数组和string 4、引用类型赋值或者通过方法传递参数是 “复制引用” 需要注意的是:引用类型永远分配在堆上,而值类型并不总是分配在栈上,比如下面三种情况: 1、引用类型内部的变量,即使是值类型,也会随同引用类型的实例一起被分配在堆上。 2、对于值类型的数组,由于数组是引用类型,数组内的值类型元素,也被分配在堆上。 3、对于闭包,如下: Action<int> act = a => { Console.WriteLine(a); }; C# compiler 生成的IL 会添加一个静态的辅助类,闭包内的局部变量 也会成为辅助类的成员变量,因此,这种值类型的局部变量也被分配到堆上。 转载于:https://www.cnblogs.com

C# 装箱 与 拆箱

泪湿孤枕 提交于 2019-11-27 01:28:21
1、使用场景 装箱的使用场景:想把值类型当做引用类型来使用,于是把值类型转换为引用类型。 拆箱的使用场景:想把引用类型当做值类型来使用,于是把引用类型转化为值类型。 再进一步,为什么想把值类型当做引用类型来使用? 比如:方法定义时接受Object 类型的参数,而你想传递int 类型,此时需要把int装箱为Object;对于一些非泛型的容器,为了保证通用,元素类型定义为Object,此时向容器内添加int,double的时候,需要装箱。 为什么想把引用类型当做值类型来使用呢?对于值类型装箱后的引用类型,你想直接使用值类型的数据。 2、实现原理 装箱: (1)在堆上分配一块内存,该内存就是一个实例 (2)将值类型的数据复制到刚创建的实例中 (3)返回该实例的引用 拆箱: (1)取出实例中的数据 (2)赋值给新的变量 3、辨别是否进行了装箱拆箱 拆箱是显式的,而装箱可以显式也可以隐式,关键是判断有没有把值类型当做引用类型来使用。 View Code 1 class Program 2 { 3 static void Main() 4 { 5 int a = 123 ; 6 7 // 显示的装箱,也可以认为是向上转型,是安全的。 8         // int(Int32)继承ValueType,ValueType 继承Object 9 object obj = a; 10 11 //

C# 相等性判断

谁说我不能喝 提交于 2019-11-27 01:27:30
C# 相等性判断有四个方法: 1 public static bool ReferenceEquals(object left, object right); 2 public static bool Equals(object left, object right); 3 public virtual bool Equals(object right); 4 public static bool operator ==(MyClass left, MyClass right); ReferenceEquals方法:使用场景是比较两个变量是否为同一个引用。对于引用类型,比较两个变量是否为同一个引用。对于值类型,先装箱,再比较装箱后的变量是否为同一个引用。显然,对于值类型,ReferenceEquals方法的结果必定是False。 ReferenceEquals方法,用户不应该重写。为什么?重写的原因是:原有的实现不能完成用户所期望的功能。ReferenceEquals方法就是比较变量是否指向同一个引用,用户不应该期望ReferenceEquals方法完成其他的功能。 静态Equals方法:使用场景是不清楚两个变量运行时的类型,因为变量可能是值类型、引用类型或者为Null。内部调用 left变量的实例Equals方法。静态Equals方法,用户不应该重写。 实例Equals方法

多态、继承、this、super、及多态执行方法时的原理

╄→гoц情女王★ 提交于 2019-11-27 01:01:27
先放一下多态的定义: (360词典上的哈) 多态(Polymorphism)按字面的意思就是"多种状态"。在 面向对象语言 中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述--多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4 编程技术 内幕")。简单的说,就是一句话:允许将子类类型的 指针 赋值给父类类型的指针 看完上面的定义,可能你会觉得有点懵,其实也就是两句话: 1.一种事物的多种形态 2.父类引用指向子类对象 首先来解释第一点:   多态是指的一种事务的多种形态。 说明一下抽象:   抽象:忽略物体的实际属性的状态、个体的特殊行为等,忽略问题的表现,而关注问题的本质的一个过程。 比如说,我们每一个人都是一个个体。我们就可以把个体的特殊行为和特殊属性值忽略,而抽取每一个人的共性作为人这个类。 而我们实现对象的时候再把我们个体的这些特殊属性值为人这个类的属性赋值。而在类中,我们人这个类虽然有属性,却没有具体指。 为类的属性填值和改变具体行为的过程,被称为类的实现也就是建立一个对象。 简化为一句话哈(抽象是忽略个体实际而转化为一个类型的过程。实例化是将类型特殊化为一个个体的过程) 然后下一个概念是继承:(一定要理解昂)