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. Oracle创建用户、表空间并设置权限

    代码: //dba账户登录 sqlplus 请输入用户名:dpp_data as sysdba 请输入口令:dpp_data //创建账号 create user techrpt_data ident ...

  2. PHP类和对象等代码说明

    1.定义和创建类和对象: 定义类要使用class关键字.例如:class 类名{//属性和方法} 创建对象使用new关键字.例如: $p1 = new 类名;,可以基于一个类创建多个对象. 2. 类属 ...

  3. IN31志愿者“孝行天下,感恩父母”晚会

    IN31是一群志愿者,为社会倾力奉献与引发爱的公益组织.成功举办第一场孝行天下的大型公益活动

  4. ab网站压力测试

    ab网站压力测试命令的参数.输出结果的中文注解    permalink 以前安装好APACHE总是不知道该如何测试APACHE的性能,现在总算找到一个测试工具了.就是APACHE自带的测试工具AB( ...

  5. C#编程总结(七)数据加密——附源码

    C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容 ...

  6. .NET invoke NetSuite Restlet

    Please indicate the source if you need to repost. Restlet allows programmers to use the http request ...

  7. 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, ...

  8. SharedPreferences写入和读出数据

    Android中有很多方法存储数据,如SharedPreferences.SQLite数据库等.简单数据的存储适用SharedPreferences. 本文使用SharedPreferences写入和 ...

  9. jsp页面样例及解析

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  10. Guava学习笔记:Guava新增集合类型-Multimap

    在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业 ...