java转入C#学习笔记-2
来源:互联网 发布:红楼梦 脂评本 知乎 编辑:程序博客网 时间:2024/05/16 11:31
c#之结构方面:
结构 (struct)和类有些相似,首先他们都是能够包含数据成员和函数成员的数据结构。
其不同点:
1.类用class关键字声明,结构用struct关键字
2.类是引用类型,而结构是值类型。简单来说,类的实例变量保存的是实例对象在内存堆中的地址,结构的实例变量保存的是结构对象的字面值。
3.结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。
4.使用的场景:
首先,复制整个结构通常不如复制对象引用的效率高,因此结构的赋值和值参数传递可能比引用类型的开销更大
其次,除了 ref 和 out 参数,不可能创建对结构的引用,这样限制了结构的应用范围。
但,对小型数据结构而言,使用结构而不使用类会大大节省需要为应用程序分配的内存数量。
c#之枚举方面:
枚举类型 (enum type) 是具有一组命名常量的独特的值类型。c#的枚举和java没什么区别。
如:enum Color { Red, Green, Blue }
c#的枚举仅是比java多了一点不同:每个枚举类型都有一个相应的整型类型,称为该枚举类型的基础类型 (underlying type)。没有显式声明基础类型的枚举类型所对应的基础类型是 int。
如:enum Alignment: sbyte { Left = -1, Center = 0, Right = 1 }
枚举成员的声明中包含常量表达式,用于指定该成员的值。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。如果枚举成员声明未显式指定一个值,该成员将被赋予值零(如果它是该枚举类型中的第一个值)或前一个枚举成员(按照文本顺序)的值加 1。
简单来说,就是c#提供了用整数来代表枚举对象的简便方式。
c#之委托方面:
委托类型 (delegate type) 表示对具有特定参数列表和返回类型的方法的引用。
通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。
委托既可以引用静态方法,也可以引用实例方法。
引用了实例方法的委托也就引用了一个特定的对象,当通过该委托调用这个实例方法时,该对象在调用中成为 this。
也可以使用匿名函数创建委托,这是即时创建的“内联方法”。匿名函数可以查看外层方法的局部变量。
如:static double[] Apply(double[] a, Function f) {
double[] result = new double[a.Length];
for (int i = 0; i < a.Length; i++) result[i] = f(a[i]); return result; }
double[] doubles = Apply(a, (double x) => x * 2.0);
委托的一个有趣且有用的属性在于,它不知道也不关心它所引用的方法的类;它仅关心所引用的方法是否与委托具有相同的参数和返回类型。
结构 (struct)和类有些相似,首先他们都是能够包含数据成员和函数成员的数据结构。
其不同点:
1.类用class关键字声明,结构用struct关键字
2.类是引用类型,而结构是值类型。简单来说,类的实例变量保存的是实例对象在内存堆中的地址,结构的实例变量保存的是结构对象的字面值。
3.结构类型不支持用户指定的继承,并且所有结构类型都隐式地从类型 object 继承。
4.使用的场景:
首先,复制整个结构通常不如复制对象引用的效率高,因此结构的赋值和值参数传递可能比引用类型的开销更大
其次,除了 ref 和 out 参数,不可能创建对结构的引用,这样限制了结构的应用范围。
但,对小型数据结构而言,使用结构而不使用类会大大节省需要为应用程序分配的内存数量。
c#之枚举方面:
枚举类型 (enum type) 是具有一组命名常量的独特的值类型。c#的枚举和java没什么区别。
如:enum Color { Red, Green, Blue }
c#的枚举仅是比java多了一点不同:每个枚举类型都有一个相应的整型类型,称为该枚举类型的基础类型 (underlying type)。没有显式声明基础类型的枚举类型所对应的基础类型是 int。
如:enum Alignment: sbyte { Left = -1, Center = 0, Right = 1 }
枚举成员的声明中包含常量表达式,用于指定该成员的值。每个枚举成员的常数值必须在该枚举的基础类型的范围之内。如果枚举成员声明未显式指定一个值,该成员将被赋予值零(如果它是该枚举类型中的第一个值)或前一个枚举成员(按照文本顺序)的值加 1。
简单来说,就是c#提供了用整数来代表枚举对象的简便方式。
c#之委托方面:
委托类型 (delegate type) 表示对具有特定参数列表和返回类型的方法的引用。
通过委托,我们能够将方法作为实体赋值给变量和作为参数传递。委托类似于在其他某些语言中的函数指针的概念,但是与函数指针不同,委托是面向对象的,并且是类型安全的。
委托既可以引用静态方法,也可以引用实例方法。
引用了实例方法的委托也就引用了一个特定的对象,当通过该委托调用这个实例方法时,该对象在调用中成为 this。
也可以使用匿名函数创建委托,这是即时创建的“内联方法”。匿名函数可以查看外层方法的局部变量。
如:static double[] Apply(double[] a, Function f) {
double[] result = new double[a.Length];
for (int i = 0; i < a.Length; i++) result[i] = f(a[i]); return result; }
double[] doubles = Apply(a, (double x) => x * 2.0);
委托的一个有趣且有用的属性在于,它不知道也不关心它所引用的方法的类;它仅关心所引用的方法是否与委托具有相同的参数和返回类型。
0 0
- java转入C#学习笔记-2
- java转入C#学习笔记-1
- vim 学习笔记一,从windows转入linux
- 学习状态转入低迷
- java转入编写代码
- Java 程序员学习 C#笔记 (2)
- c# Excel转入到DataSet
- C# 学习笔记(2)
- C# 学习笔记(2)
- C#学习笔记2
- C#学习笔记(2)
- C#学习笔记2
- c#学习笔记2
- c#学习笔记2
- C#学习笔记2
- c#学习笔记2
- C#学习笔记2
- C# 学习笔记 2
- 关于R.layout或R.id下变量报错的解决方法
- iOS 自动布局1
- redis安装和安全
- 引导页编写
- 高效了解需要了解的linux命令
- java转入C#学习笔记-2
- 如何在C++中将filetime时间转化为字符串?
- IPsec 应用层和内核态通信方式
- XSHELL 绝佳配色方案, 保护你的眼睛
- 发现一块“智慧石”
- map去除某个特定的键值
- 【记录】STM32在ucOS串口的操作(Polling)
- Vijava 学习笔记之ResourcePool(基础配置信息)
- MySQL单机load过高问题讨论