C#复习④

2016年6月16日

12:37

Main Classes and Structs 类和结构体

1.Contents of Classes

字段,常量,方法,构造函数,析构函数;

特性,事件,索引器,重载运算符;

嵌套类型(类,接口,结构体,枚举类型,委托)

2.Classes 类

栈类:数组、栈指针、构造函数、压栈、出栈

类实例对象分配在堆上;

类对象必须通过new关键字实例化;

类可以继承自其他类(C#不支持多继承);

类可以实现多个接口(C#支持多个接口继承)

3.Structs 结构体

点结构体:点坐标(x,y)、构造函数、MoveTo方法

结构体实例对象分配在栈上;

可以通过new关键字构造实例对象;

字段在声明时禁止初始化;

不能声明无参构造函数;

不能继承其他结构体或被继承,但是可以实现多个接口

4.Visibility Modifiers 可见性修饰符

Public visible where the declaring namespace is known 在当前命名空间下可见

Private only visible in the declaring class or struct仅在类或结构体定义域内可见

类和结构体默认的字段均为private,方法默认为public

5.Fields and Constants 字段和常量

· 在类中,字段在声明时初始化是一个可选的(可以初始化,如果没有初始化则编译器会进行默认的初始化);

· 对于常量,在声明时必须进行初始化,否则编译时会报错;

· Readonly 字段必须在声明时初始化或者在构造函数中进行初始化;数值咋编译时期不可参与运算;数值在之后不可改变;占用内存空间

6.静态字段和常量

静态字段属于类不属于实例对象(在类没有实例化任何对象时,静态字段已经产生,静态字段是这个类的固定属性,可以被通过该类构造的所有对象共享)

常量不能够声明为静态

static readonly需要注意的一个问题是,对于一个static readonly的Reference类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。

推荐:http://www.c-sharpcorner.com/UploadFile/2072a9/constant-vs-readonly-vs-static-keywords-in-C-Sharp/

7.Methods 方法、函数、过程

方法:可能有返回值也可能没有返回值

过程:没有返回值

函数:有返回值

8.Static Methods 静态方法

静态方法实现对静态字段的处理

9.Parameters 参数

两种传参方式:值传递、引用传递

用Ref型参数时,传入的参数必须先被初始化。而Out则不要要,对Out而言,就必须在方法中对其完成初始化。

用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字,以满足匹配。

Out更适合用在要要Return多个返回值的地方,而Ref则用在要要被调出使用的方法修改调出使用者的引用的时候。

ref修饰符:参数可进可出

out修饰符:参数只出不进

10.Variable Number of Parameters 可变数组参数

C#语法规定,params后边必定跟数组。

作用是把不定数量的、同类型的参数装入这个数组中

string也是object的子类,所以可以用一个object[]数组代替string[]

11.Method Overloading 方法重载

方法重载:在一个类中两个或者两个以上的方法具有相同的函数名

并且满足参数不同或者参数类型不同或者 不同参数定义(out/ref)成为方法的重载。

重载不要求函数返回类型不同,也就是说当两个函数只有返回类型不同时不满足重载的条件!

满足条件的重载:

Illegal overloading:

12.Constructors for Classes 类的构造函数

类的构造函数有可见性修饰符,没有返回值,且函数名与类名相同;

当声明类时若不主动添加构造函数,则编译时编译器会自动添加一个默认的构造函数,并且这个构造函数无参。

当声明一个类的时候手动添加了构造函数,那么编译器不再为该类添加无参构造函数,也就是之后在实例化对象时手动调用无参构造函数会报错。

一个类可以有多个构造函数,这些构造函数没有返回值,并且函数名相同。按照之前的重载定义,一个类中的所有构造函数互为重载函数

对于构造函数,可以选择对字段进行初始化。当未初始化时,默认的构造函数会按照下面的规则进行对各个字段的初始化。

13.Constructor for Structs 结构体的构造函数

结构体的构造函数有可见性修饰符,没有返回值,构造函数名与结构体名相同;

对每一个结构体都会有一个默认的无参构造函数;

程序员不能为结构体创建一个带参的构造函数;

结构体的构造函数必须初始化所有的字段

14.Static Constructors 静态构造函数

静态构造函数必须是无参的,没有可见性修饰符;

一个类或者结构体有且只能有一个静态构造函数;

静态构造函数用来初始化静态字段;

当该类型被第一次使用时,静态构造函数立刻被调用

15.Destructors 析构函数

在一个实例对象被垃圾回收之前调用析构函数;

析构函数没有可见性修饰符;

结构体没有析构函数;

16.Indexers 索引器

索引器包括可见性修饰符、返回值、函数名、索引类型

17.Operator Overloading 运算符重载

运算符重载需要注意对某个运算符重载后要对其相应的另一个运算符重载。比如重载了加法运算符,相应的也要重载减法运算符;

可以被重载的运算符:

数学运算符:+、-、*、/、%、++、--

关系运算符:==、!=、<、>、<=、>=

位运算符:&、|、^

其他运算符:!、~、>>、<<、true、false

重载运算符必须返回一个函数值;

18.Conversion Operators 类型转换重载

显式类型转换 Explicit conversion

隐式类型转换 Implicit conversion

推荐:https://msdn.microsoft.com/en-us/library/09479473(v=VS.80).aspx

class SampleClass
{
public static explicit operator SampleClass(int i)
{
SampleClass temp = new SampleClass();
// code to convert from int to SampleClass...

return temp;
}
}

19.Nested Types嵌套类型

内部类可以访问外部类的所有成员变量和成员函数;

外部类之能访问内部类中可见性为public的成员变量和成员函数;

只有当内部类为public时,其他类才可以访问;

访问内部类需要通过外部类名加上点运算符 "."加上内部类名

C#复习④的更多相关文章

  1. iOS总结_UI层自我复习总结

    UI层复习笔记 在main文件中,UIApplicationMain函数一共做了三件事 根据第三个参数创建了一个应用程序对象 默认写nil,即创建的是UIApplication类型的对象,此对象看成是 ...

  2. vuex复习方案

    这次复习vuex,发现官方vuex2.0的文档写得太简略了,有些看不懂了.然后看了看1.0的文档,感觉很不错.那以后需要复习的话,还是先看1.0的文档吧.

  3. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  4. 复习(1)【Maven】

    终于开始复习旧知识了,有输入必然要有输出.输入和输出之间的内化过程尤为重要,在复习的同时,真正把学到的东西积淀下来,加深理解. Maven项目概念与配置 Maven是一个项目管理和综合工具.Maven ...

  5. 《CSS权威指南》基础复习+查漏补缺

    前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...

  6. JS复习--更新结束

    js复习-01---03 一 JS简介 1,文档对象模型 2,浏览器对象模型 二 在HTML中使用JS 1,在html中使用<script></script>标签 2,引入外部 ...

  7. jQuery 复习

    jQuery 复习 基础知识 1, window.onload $(function(){});   $(document).ready(function(){}); 只执行函数体重的最后一个方法,事 ...

  8. jQuery5~7章笔记 和 1~3章的复习笔记

    JQery-05 对表单和表格的操作及其的应用 JQery-06 jQuery和ajax的应用 JQery-07 jQuery插件的使用和写法 JQery-01-03 复习 之前手写的笔记.实在懒得再 ...

  9. HTML和CSS的复习总结

    HTML(Hypertext Markup Language)超文本标记语言:其核心就是各种标记!<html> HTML页面中的所有内容,都在该标签之内:它主要含<head>和 ...

  10. 2017年1月1日 java学习第二天复习

    今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好.  学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结   学习java的第二天. 今天学习了java最基础的一些内容,照着 ...

随机推荐

  1. PHP循环语句基础介绍

    PHP 中的循环语句用于执行相同的代码块指定的次数. 循环 在您编写代码时,您经常需要让相同的代码块运行很多次.您可以在代码中使用循环语句来完成这个任务. 在 PHP 中,我们可以使用下列循环语句: ...

  2. ASP.NET MVC 网站开发总结(三) ——图片截图上传

    本着简洁直接,我们就直奔主题吧,这里需要使用到一个网页在线截图插件imgareaselect(请自行下载). 前台页面: <!DOCTYPE html> <html> < ...

  3. Android自定义surfaceView显示多张图片

    我自定义了一个surfaceview,我在上面绘制多张图片,让它能够上下方滚显示图片,但是onMeasure()方法在重写的时候遇到了问题,不知道如何设置它的高度, public class MySu ...

  4. 应用服务器和Web服务器

    如上图所示,绝大部分的公司会采用Apache+tomcat集群(或jetty集群)来部署公司的Web服务, Web服务器和应用服务器关系,先介绍一下我们常说的服务器: Tomcat服务器,是运行ser ...

  5. Android提升篇系列:Activity recreate(Activity 重新创建/自我恢复)机制(一)

    注:本文中的recreate是指当内存不足时,Activity被回收,但再次来到此Activity时,系统重新恢复的过程.例如:当Activity A到Activity B时,如果内存不足,A被回收, ...

  6. Linux下如何查看哪个进程占用内存多?

    1.top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者 ...

  7. GJM : FlatBuffers 与 protobuf 性能比较 [转载 ]

    原帖地址:http://blog.csdn.net/menggucaoyuan/article/details/34409433 原作者:企鹅  menggucaoyuan 未经原作者同意不允许转载 ...

  8. var和dynamic的区别及如何正确使用dynamic ?

    C#中的很多关键词用法比较容易混淆,var和dynamic就是其中一组,他们都可以申明动态类型的变量,但是本质上他们还是有不少区别的.var 在编译阶段已经确定类型,在初始化时候,必须提供初始化的值, ...

  9. Timeline Portfolio - 时间轴作品集效果

    这里分享一个超炫的时间轴展示作品集效果.设计师和前端开发人员可以借助这个效果来制作新颖的作品集和个人简历.时间轴专门用来呈现出年代的一系列事件.您可以把这种效果嵌入各种媒体,包括微博,视频和地图,并把 ...

  10. PHP 后台定时循环刷新某个页面 屏蔽apache意外停止

    PHP 后台定时循环刷新某个页面 如果间隔时间过长的话  会出现apache自动停止的现象.出现的原因则是设置了 <IfModule mpm_winnt_module> ThreadsPe ...