个人网站www.v-ver.com

c#复习笔记 类与结构

结构与类,类是存储在堆heap上的引用类型,结构是在栈stack上的值类型,结构不支持继承

类:

一、数据成员:字段,常量,事件的成员

二、函数成员:方法、属性、构造函数、终结器(析构函数)、运算符重载、索引器。

1】方法

方法的申明[modifiers] return_type MethodName([parameters])

{

//method body

return data ;//or void

}

参数可以通过引用传递和值传递传递给方法

通过引用传递给方法的话,对象在方法内部发生的任何改变退出后任然有效(也就是传递的是指针)。

通过值传递则不会这样,被调用的方法得到的变量的一个相同副本,也就是退出后原值不会发生改变。

一些思考:其实被调用的方法都得到了一个副本,只不过引用方法得到了一个引用的副本,ps引用(也可以叫做别名)是值类型,所以我们可以这么理解,传入的形参其实都是值类型的副本。

如果想改变值类型怎么办呢

Refout out可以和c中的指针等效,因为都需要初始化值才能够使用,ref则需要初始化值就可以使用,out可以不初始化(请探讨out设计的目的,就是为了输出一个值,而ref是为了改变)

重载:声明参数数量或者参数类型不同的就好。

2】属性

说白了。。就是两个变量和两个方法,两个变量:备用变量与value,方法get set

声明方法就是比字段多了一个大括号

原理:举例 属性 property 备用变量 _property 

property被赋值——value被赋值为property的值(valueset方法中的局部变量)——执行set事件中的代码。

当需要输出property的值时——执行get方法并且返回与之类型一样的变量

为什么要有局部变量,因为valueset内部的局部变量,需要保留value的值,所以便有了备用变量,所以很多时候,set第一步_property=value

(只读属性等,可以参照这两个方法的作用)

【2.5】索引器

出现这个的目的是为了更好地访问实例对象内部的数据,因为如此,所以必须是实例对象,而不能是静态对象。

申明方法

public int this[int a] 两个int均可更改。

{get;

set;}

原理和属性是一样的

使用方法 Person per=new Person(); Console.WriteLine(per[1]);per[1]=0;(不详细解释了,大致就是这个样子,内部也存在value这个东西!说白了。。和属性相比原理就是多传入了一个变量)

3】构造函数

初始化所有值之后执行构造函数,这里没有什么好解释的

Ps静态构造函数

(所有静态几乎都是一个道理。。。只执行一遍,并且在所有实例化执行之前执行)

静态方法,也就是可以直接类名.调用的方法

构造函数可以调用其他构造函数

ps】只读字段

Readonly,只能写一次

匿名类型 var

弱引用 使用WeakReference 

            WeakReference wangjiwr = new WeakReference(new property());

            property wangji = wangjiwr.Target as property;

            GC.Collect();

当类特别大的时候可以使用,这样可以让垃圾回收管理器回收空间

也是下次再调用的必须再次实例化一次

Ps所谓强引用就是property wangji = wangjiwr.Target as property;,这样是不会被回收的。

还有一个partial,就是可以在各个地方声明类的结构。

***结构***

Struct 优势,不在托管堆上,存储在栈中或存储为内联(inline)也就是,结构是值类型

所以,运行速度会快。

劣势,不支持继承 but 继承于object

posted @ 2014-03-16 15:01  左光星  阅读(132)  评论(0编辑  收藏  举报
个人网站www.v-ver.com