首页 > 代码库 > C#学习笔记 ----对象和类型

C#学习笔记 ----对象和类型

类和结构

类是存储在堆(heap)上的引用类型,而结构是存储在栈(stack)上的值类型。

结构 不支持继承

 

数据成员 是包含类的数据--字段、常量和事件的成员。

函数成员提供了操作类中数据的某些功能,包括方法、属性、构造函数和终结器(finalizer)、运算符以及索引器

 

ref参数 迫使值参数通过引用传递给方法

 

在方法的输入参数前面加上out前缀时,传递给该方法的变量可以不初始化。

 

命名参数允许按照任意顺序传递

 

参数也可以是可选的。必须为可选参数提供默认值。

 

方法重载:

.俩个方法不能仅在返回类型上有区别

.俩个方法不能仅根据参数是声明为ref还是out来区分

 

属性

在属性定义中省略set访问器,就可以创建只读属性

在属性定义中省略get访问器,就可以创建只写属性

C#允许给属性的set和get访问器设置不同的访问修饰符,属性可以有公有的get访问器和私有或受保护的set访问器

如果属性的set和get访问器中没有任何逻辑,就可以使用自动实现的属性。

 

构造函数

注意,如果提供了带参数的构造函数,编译器就不会自动提供默认的构造函数。

 

可以把构造函数定义为private 或protected,这样不相关的类也不能访问,

这在下面俩种情况下是有用的:

.类仅用作某些静态成员或属性的容器,因此永远不会实例化它

.希望类仅通过调用某个静态成员函数来实例化(这就是所谓对象实例化的类工厂方法)

 

静态构造函数,类有一些静态字段或属性,需要在第一次使用之前,从外部源中初始化这些静态字段和属性

 

C#构造函数初始化器可以包含对同一个类的另一个构造函数的调用,也可以包含对直接基类的构造函数的调用(使用相同的语法,应使用base关键字代替this)

 

只读字段

readonly 

可以在构造函数中给只读字段赋值,但不能在其他地方赋值

public class Document{    public readonly DateTime CreationData    public Document()    {        // Read in creation date from file.Assume result is 1 Jan 2002        // but in general this can be different for different instances        // of the class        CreationDate = new DateTime(2002,1,1);    }}            

 

匿名函数

var与new 关键字一起使用,可以创建匿名类型

如下:

var caption = new {FirstName = "James", MiddleName = "T",LastName = "Kirk"};

 

结构

正面影响:为结构分配内存时,速度非常快,因为它们将内联或者保存在栈中。在结构超出了作用域被删除时,速度也很快。

负面影响:只要把结构作为参数来传递或者把一个结构赋予另一个结构,结构的所有内容就被复制,而对于类则只复制引用。

 

结构的继承链:每个结构派生自System.ValueType类,System.ValueType类又派生自System.Object。

 

默认构造函数把数值字段都初始化为0,把引用类型字段初始化为null,且总是隐式地给出。

 

部分类

partial关键字允许把类、结构或接口放在多个文件中

partial关键字的用法是:把partial放在class、struct或interface关键字前面

 

扩展方法,它允许改变一个类,但不需要该类的源代码。

C#学习笔记 ----对象和类型