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); 
 
  委托的一个有趣且有用的属性在于,它不知道也不关心它所引用的方法的类;它仅关心所引用的方法是否与委托具有相同的参数和返回类型。
0 0
原创粉丝点击