C# 高级编程(笔记1)

第三章

1.方法重载不能仅根据方法的返回值类型来区分, 即:参数个数和参数类型都相同,只是函数的返回值不同,是不能作为函数的重载的

2.结构的构造函数  

为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数,因为编译器总是为其提供一个无参数的默认构造函数,它是不允许替换的。  

结构中字段的初始值不能绕过默认构造函数,也就是必须在构造函数中完成初始化,且不能是无参构造函数  

结构是值类型,不支持继承,结构中的new运算符与类和其他引用类型的工作方式不同。new运算符 并不分配堆中的内存,而是只调用相应的构造函数,根据传送给它的参数来初始化所有的字段。

stFuct Dimensions 
{  
    pub1ic double Length; 
    pub1ic double  Width; 
} 

Dimensions point = new Dimensions(); 
point.Length = 3; 
point.width = 6;

结构是会影响性能的值类型,但根据使用结构的方式,这种影响可能是正面的,也可能是负面的。

a.正面的影响

   为结构分配内存时,速度非常快,因为它们保存在栈中。在结构超出了作用域被删除时,速度也很快。

b.负面影响

   只要把结构作为参数来传递或者把一个结构赋予另一结构(如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。这样就会有性能损失,根据结构的大小,性能损失也不同。注意,结构主要用于小的数据结构。但当把结构作为参数传递给方法时,应把它作为ref参数传递,以避免性能损失【此时只传递了结构在内存中的地址,这样传递速度就与在类中的传递速度一样快了。但如果这样做,就必须注意被调用的方法可以改变结构的值】。

3.静态类

  类中只包含静态的方法和属性,且不能为静态类创建类的实例

4.扩展方法

  是静态方法,只能在一个静态类中扩展需要扩展的方法,如果扩展方法与类中的某个方法同名,就从来不会调用扩展方法。类中已有的任何实例方法优先。

5.静态构造函数

  编写静态构造函数的一个原因是,类有一些静态字段或属性,需要在第一次使用类之前,从外部源中初始化这些静态字段和属性,注意,静态构造函数没有访问修饰符,其他C#代码从来不调用它,但在加载类时,总是由.NET 运行库调用它,所以像public 或 private这样的访问修饰符就没有任何意义。出于同样原因,静态构造函数不能带任何参数,一个类也只能有一个静态构造函数。很显然,静态构造函数只能访问类的静态成员,不能访问类的实例成员。

6.只读字段(readonly)   

private readonly Int32 MaxLength = 52; //声明时可以赋值,还可以在构造函数里赋值,其他地方不能为其赋值

7.匿名类型 var与new关键字一起使用时,可 以创建匿名类型。匿名类型只是一个继承自Object且没有名称的类。该类的定义从初始化器中推断, 

var captain = new { Firstlame = "Janes", MiddleName = "T", LastName = "Kirk" };
原文地址:https://www.cnblogs.com/notebook2011/p/2969353.html