引用类型

clr via c# 泛型

我的未来我决定 提交于 2020-02-06 16:06:11
1,类型对象,对于应用程序的各种类型创建的对象叫做类型对象:Type object;对于泛型类型参数的类型,CLR同样也会创建内部类型对象,适用于 引用类型 值类型 接口类型 委托类型 具有泛型类型参数的类型称为:开放类型。 指定了泛型实参的类型称为:封闭类型。比如 Dictionary<TKey,TVale>称为开放类型,Dictionary<string,int>称为封闭类型 2,委托和接口泛型的逆变和协变。 Func<object, ArgumentException> fn1 = (x) => { Console.WriteLine(x); return null; }; Func<string, Exception> fn2 = fn1; Exception e = fn2("x"); Console.ReadKey(); 当一个委托或者一个接口类型,其泛型参数前面带in时,则允许接受该参数为其派生类的委托的实列。 当一个委托或者一个接口类型,其泛型参数前面带out时,则允许接受该参数为其基类的委托的实列。比如上面。 string 是 object 的派生类,Exception 是 ArgumentException 的基类。所以可以赋值。 3,泛型的约束 public static T Min<T>(T o1,T o2 ) where T : IComparable<T

C# 装箱与拆箱

倖福魔咒の 提交于 2020-02-06 13:58:11
知识点 值类型。 值类型是在栈中分配内存,在声明时初始化才能使用,不能为null。 值类型超出作用范围系统自动释放内存。 主要由两类组成:结构,枚举(enum),结构分为以下几类: 1、整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong) 2、浮点型(Float、Double) 3、decimal 4、bool 5、用户定义的结构(struct) 引用类型。 引用类型在堆中分配内存,初始化时默认为null。 引用类型是通过垃圾回收机制进行回收。 包括类、接口、委托、数组以及内置引用类型object与string。 概念 由于C#中所有的数据类型都是由基类System.Object继承而来的,所以值类型和引用类型的值可以通过显式 (或隐式)操作相互转换,而这转换过程也就是装箱(boxing)和拆箱(unboxing)过程。 装箱 是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一 个对象实例,并将该值复制到新的对象中。 拆箱 是从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 ------------------- 为何需要装箱? 一种最普通的场景是,调用一个含类型为Object的参数的方法,该Object可支持任意为型,以便通用。当你需 要将一个值类型

C++函数引用形参何时是常量引用

橙三吉。 提交于 2020-02-06 12:33:59
一,如果需要修改参数内容,则设置为普通引用类型 二. 如果不需要修改参数内容则最好设置为常量引用类型 三本应设置为常量引用的设置为普通引用则会出现如下几个问题 1)容易给使用者一种误导,即允许修改实参内容 2)显示了该函数所能接受的实参类型无法把const对象,字面常量或者需要类型转换的对象传递给普通的引用形参 来源: CSDN 作者: 楼兰公子 链接: https://blog.csdn.net/nh5431313/article/details/104193742

值类型与引用类型区别

核能气质少年 提交于 2020-02-06 12:19:04
1、将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身 2、值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。 但与引用类型相同的是,结构也可以实现接口 3、值类型不可能包含null值:然而,可空类型功能允许将null赋给值类型 4、每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值,比如说:int->0 bool->false short->0 byte->0 char->'\0' 来源: https://www.cnblogs.com/xiaoweigogo/p/7799033.html

值类型和引用类型

半世苍凉 提交于 2020-02-06 12:12:54
值类型与引用类型的区别: 1.将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。 2.值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType。但与引用类型相同的是,结构也可以实现接口。 3.值类型不可能包含 null 值:然而,可空类型功能允许将 null 赋给值类型。 4.每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 来源: https://www.cnblogs.com/terryj2008/p/6840926.html

值类型和引用类型的区别?

孤街醉人 提交于 2020-02-06 12:11:10
1 、将一个值类型变量赋给另一个值类型变量时,将复制包含的值。引用变量的赋值 只复制对对象的引用 ,而不复制对象本身。 2 、值类型不可能派生出新的类型:所有的值类型均隐式派生自 System.ValueType.但与引用类型相同的是, 结构也可以实现接口。 3 、值类型不可能包含null 值;然后, 可空类型功能允许将null 赋给值类型 。 4 、每种值类型均有一个隐式的 默认将构造函数来初始化该类型的默认值 。。。 来源: https://www.cnblogs.com/xiaohan170208/p/11278214.html

值类型和引用类型的区别

筅森魡賤 提交于 2020-02-06 11:43:07
1: public class Person 2: { 3: public string Name { get; set; } 4: public int Age { get; set; } 5: } 6: 7: public static class ReferenceAndValue 8: { 9: public static void Demonstration() 10: { 11: Person zerocool = new Person { Name = "ZeroCool", Age = 25 }; 12: Person anders = new Person { Name = "Anders", Age = 47 }; 13: 14: int age = zerocool.Age; 15: zerocool.Age = 22; 16: 17: Person guru = anders; 18: anders.Name = "Anders Hejlsberg"; 19: 20: Console.WriteLine("zerocool's age:\t{0}", zerocool.Age); 21: Console.WriteLine("age's value:\t{0}", age); 22: Console.WriteLine("anders' name:\t{0}

C# 装箱和拆箱

左心房为你撑大大i 提交于 2020-02-06 11:27:27
1、 装箱和拆箱是一个抽象的概念 2、 装箱是将 值类型 转换为 引用类型 ;拆箱是将 引用类型 转换为 值类型 利用装箱和拆箱功能,可通过允许 值类型 的任何值与 Object 类型 的值相互转换,将值类型与引用类型链接起来 例如: int val = 100; object obj = val; Console.WriteLine (“对象的值 = {0}", obj); 这是一个装箱的过程,是将 值类型 转换为 引用类型 的过程 int val = 100; object obj = val; int num = (int) obj; Console.WriteLine ("num: {0}", num); 这是一个拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程 注:被装过箱的对象才能被拆箱 3、 .NET中,数据类型划分为 值类型 和 引用 (不等同于C++的指针) 类型 ,与此对应,内存分配被分成了两种方式,一为栈,二为堆,注意:是托管堆。 值类型只会在栈中分配。 引用类型分配内存与托管堆。 托管堆对应于垃圾回收。 4:装箱/拆箱是什么? 装箱:用于在垃圾回收堆中存储值类型。装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。 拆箱:从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。 5:为何需要装箱

结构体和类

只谈情不闲聊 提交于 2020-02-05 08:04:21
结构是值类型,但在语法上常常当做类来处理 struct typeNum { public string a="hello"; public string b="world"; } 如果仅需要一个小的数据结构,可以考虑用结构,因为结构在性能上比类略佳。 结构不支持继承,在使用前必须先初始化结构是会影响性能的值类型,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。 正面的影响是为结构分配内存时,速度非常快,因 为它们将内联或者保存在栈中。在结构超出了作用域被删除时,速度也很快。负面影响是,只要把结构作为参数来传递或者把一个结构赋予另一一个结构如 A-B,其 中A和 B是结构),结构的所有内容就被复制,而对于类,则只复制引用。 这样就会有性能损失,根据结构的大小,性能损失也不同。 类和结构体的不同点:   1.关键字不同 一个是class,一个是struct   2.类型不同,一个是引用类型,一个是值类型(存储:一个堆区,一个栈区)。关于值类型和引用类型以及堆与栈详细可见   3.成员不同,结构体没有默认的构造函数(可以添加)和没有析构函数,不可以使用abstract,protected,sealed修饰   4.Struct变量使用完之后就自动解除内存分配,Class实例有垃圾回收机制来保证内存的回收处理   5.继承性。结构不可以继承自另一个结构或被继承

int和Integer有什么区别

一个人想着一个人 提交于 2020-02-04 12:15:40
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。int 是 java 的原始数据类型, Integer是 java 为 int 提供的封装类。Java 为每个原始类型提供了封装类。 原始类型封装类boolean、Boolean char、Character byte、Byte short、Short int、Integer long、Long float、Float double、Double。 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法, 它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。 对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 来源: https://www.cnblogs.com/miniSimple/p/12258827.html