学习笔记

第一章:

一、回顾数组

1、变量 : 只能存储一个数据

2、数组 :存储固定大小的相同类型的数据

3、对象 : 存储多个相同/不同类型的数据

4、集合 : 特殊的容器,存储N个相同/不同类型的数据

注意:容器中存储的数据是我们要即将处理的数据(内存)

课堂练习 -> 查看笔记

定义一个数组,初始化10个整数,计算最大值和总和!

二、System.Array类 -> 类库

Random -> 类,产生随机数

Array -> 类,对数组进行操作

注:

1)调用方法时,注意以下几点:

第一:方法名

第二:参数

第三:返回值(有,一般用变量接收)

2)在C#中,提供很多的类库,每个类中提供了相关的属性和方法

三、集合

1、概念

集合:特殊的容器,存储N个相同/不同类型的数据

2、分类

非泛型集合类 :ArrayList、HashTable

泛型集合类 : List、Dictionary

3、装箱与拆箱

装箱 : 基本数据类型     -> 对象类型(object)

拆箱 : 对象类型(object) -> 基本数据类型

注:object是一个特殊的数据类型,可以接收任意类型的数据

4、is运算符

5、泛型 :指定集合存放数据的种类

四、常用的集合对象(重点)

1、存储单个元素的集合

1)语法

List<T> 集合名 = new List<T>();

注:T表示的就是泛型,指定集合存储数据的种类

T表示任意的数据类型,也可以是自定义对象类型

2)常用的属性和方法

Count

Add() : 把元素添加到集合的最后位置

Insert(下标,元素) : 在指定的下标位置添加元素

Remove(元素)/RemoveAt(下标) : 移除集合中的某个元素

Clear() : 清空集合中的所有元素

ToArray() : 把集合转换为数组

Contains() : 查找集合中是否包含某个元素

课堂练习:

创建一个集合,用于存储5个字符串

1)输出其长度和所有的内容

2)判断这个字符串中,是否包含"好好学习"

创建一个集合,用于存储3个学生对象(姓名、年龄)

1)输出集合中所有学生的信息(姓名、年龄)

2)计算集合中所有学生的平均年龄

使用集合,实现手机通讯录功能

联系人 : 姓名、电话、地址

手机 :

添加联系人

删除联系人

修改联系人

查找全部联系人

查找联系人

注:

手机 : 联系人 -> 1:N

2、存储键值对的元素

1)语法

Dictionary<K,V> 集合名=new Dictionary<K,V>();

2)常用的属性和方法

Count

Add()

Remove()

Clear()

ContainsKey()/ContainsValue()

第二章:

一、面向对象的三大特征

封装、继承、多态

二、继承

1、什么是继承

继承是描述的是类与类之间的父子关系。

表示父亲的类,叫父类(基类、超类)

表示儿子的类,叫子类(派生类)

课堂练习:创建三个类,分别是人、学生、老师

在三个类中分别定义两个属性:姓名、年龄

在三个类中分别定义两个方法:吃、拉

创建对象,测试

学生 is-a 人

老师 is-a 人

2、语法

[访问修饰符] class 子类 : 父类

{

字段

属性

方法(构造方法、静态方法、实例方法、重载方法)

}

注:

1)子类也叫派生类、父类也叫基类

2)继承需要符合的关系:is-a

3)子类继承父类的成员(非私有)。

同时,子类也可以具有自己特有的成员

成员指的是:属性和方法

4)访问修饰符 : 控制访问权限

public

private

protected

internal

5)Object类是所有类的父类

C#中所有的类(包括自定义的类)

都是直接或间接继承自System.Object类

object 是所有类的父类,因此,可以接收任意类型的数据

6)this与base关键字(难点)

this    :当前对象的引用 -> 在类的内部,方法之间的调用

this()    :当前对象的构造方法 -> 在类的内部,构造方法之间的调用

base    :是一个用来引用继承自父类的成员的引用

base()    :父类对象的构造方法 -> 子类的构造方法,调用父类的构造方法

7)子类构造方法默认调用了父类的缺省构造方法

因此,当重载构造方法时,默认构造方法建议显式写出来

8)在C#中,只支持单继承(即子类只能继承一个父类)

class Student : Man,People

{

}

class Student : Man {}

class Man : People {}

9)继承具有传递性

10)sealed : 密封

三、继承的优缺点

1、优点:

1)因为大部分是继承而来的,实现代码重用,减少代码书写量;

2)很容易修改和扩展已有的实现

2、缺点:

1)父类变,子类不得不变

2)继承破坏了封装,父类实现细节暴露给子类

3)继承是一种类与类之间强耦合的关系

第三章:

一、面向对象的三大特征

封装、继承、多态

二、多态

1、定义

多态:同一操作用于不同的对象(类的实例),

可以有不同的解释,

产生不同的执行结果。

2、分类

1)编译时多态:通过重载方法来实现,

系统在编译时,根据传递的参数、

返回的类型等信息决定实现何种操作。

特点:运行速度快

2)运行时多态:通过虚方法来实现,系统在运行时,才根据实际情况(重写方法)决定实现何种操作。

特点:高度灵活和抽象

EG:

小孩、运动员、演员         -> play

理发师、外科医生、演员     -> cut

对于同一个命令,不同的人会有不同的反应,执行不同的动作;

两个或以上不同的对象,调用同一个方法出现不同的结果。

3、运行时多态的三要素

1)继承/实现

2)重写方法:各子类以自己的方式来实现

3)子类实例化父类对象或实现类实例化接口对象

类名 对象名 = new 类名() ;

父类 对象名 = new 子类() ;

三、实现

第一:定义一个父类,在父类中,定义一个虚方法

[访问修饰符] class 父类名称

{

//定义虚方法

[访问修饰符] virtual 返回值类型 方法名称([形参列表])

{

....

}

}

第二:定义相关的子类,在子类中,重写父类的虚方法

[访问修饰符] class 子类名称 : 父类名称

{

//重写父类的虚方法

访问修饰符 override 返回值类型 方法名称([形参列表])

{

....

}

}

第三:子类实例化父类对象

父类 对象名称 = new 子类([实参列表]) ;

说明:

1)使用virtual关键字声明的方法叫虚方法,不能与static、abstract或override修饰符一起使用

2)子类可以使用base重用父类功能,同时扩展新的功能

3)编译时是父类对象,运行时是子类对象

A)可以访问父类非私有的成员

B)不可以访问子类特有的成员

C)必定能访问子类重写父类的虚方法

课堂练习

英语老师、体育老师、DotNet老师 : 教

教务老师 : 分配老师上课

public void FenPei(英语老师 t)

{

Console.WriteLine("安排上课") ;

t.教() ;

}

乐器:小提琴、钢琴、二胡...,不同乐器发出不同的声音

音乐家:演奏时,使用各种乐器

獵物 : 鳥、土猪、老虎... -> 跑

獵人 : 打獵

四、作用

1)应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。

2)派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。

五、抽象类

1、概念

类是对象的抽象,抽象类是类的抽象。

2、语法

[访问修饰符] abstract class 类名

{

1.字段

2.属性

3.方法 (构造方法、静态方法、实例方法、重载方法)

4.抽象方法 :只有方法头,而没有方法体(没有实现)的方法

}

说明:

1)抽象类不能实例化

2)抽象类中可以包含抽象方法和抽象访问器

3)抽象类不能使用static或sealed关键字

4)抽象类的派生的非抽象类必须实现继承的

所有抽象方法和抽象访问器

5)类是对象的抽象,抽象类是类的抽象

6)抽象方法的语法

[访问修饰符] abstract 返回值类型 方法名称([参数列表]) ;

3、抽象类(抽象方法)实现的多态

4、抽象方法 VS 虚方法

1)抽象方法不能有实现;而虚方法可以有实现

2)抽象方法只能在抽象类中定义;虚方法则不是

3)抽象方法所在的类不能实例化对象;而包含虚方法所在的类可以。

第四章:

一、面向对象的三大特征 -> 类、对象(操作步骤[四个]) -> 抽象类 -> 接口

封装、继承、多态

二、接口

1、定义

1)接口是行为的抽象,用于赋于对象某些行为

2)通俗地讲,接口就是两个对象相互通信的规则或约束 -> 多态

2、实现

第一:定义一个接口,语法如下:

[访问修饰符] interface I接口名称 [:继承的接口列表]

{

//1.属性

数据类型 属性名 {set;get;}

//2.抽象方法

返回值类型 方法名([参数列表]) ;

}

说明:

1)接口可以包含事件、索引器、方法和属性;

接口不能包含常量、字段、运算符、实例方法、构造方法、析构函数或类型、不能包含静态成员;

接口成员一定是公共的,但不能显式使用访问修饰符。

2)接口与抽象类相同,不能实例化对象。

3)实现接口的类有两个情况:

非抽象类:都必须实现接口的所有成员

抽象类:显示声明接口的抽象方法和抽象访问器

4)一个类可以实现多个接口。

一个类可以继承一个父类的同时,还可实现一个或多个接口。

5)命名规则:大写并以"I"开始

第二:定义某个类,实现(继承)接口

public class 类名 : 接口[列表]

{

1、属性的实现

2、抽象方法的实现

}

注意:成员的实现有显示实现和隐式实现两种方式

1)显示实现

返回值类型 接口名.方法名称([参数列表])

{

...

}

2)隐式实现

public 返回值类型 方法名称([参数列表])

{

...

}

说明:

显示实现不能指定访问修饰符;

一般情况,当类要实现的是单个接口,可以使用隐式实现,隐式实现的成员必须是公有的;

如果类继承了多个接口且接口中具有相同名称成员时,就要用到显式实现;

当显式实现方式存在时,隐式实现方式就失效了;

当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问;

当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问。

不需要override关键字

第三:使用

1)实现类实例化实现类对象

实现类 对象名 = new 实现类() ;

2)实现类实例化接口对象 -> 多态

接口 对象名称 = new 实现类([实参列表]) ;

接口对象可以访问实现类重写的方法!

注:实现多态的三种形式:

父类 对象名称 = new 子类([实参列表]) ;

抽象类 对象名称 = new 子类([实参列表]) ;

接口 对象名称 = new 实现类([实参列表]) ;

三、抽象类    VS 接口

抽象类主要用作对象系统的基类,共享某些主要特性,表示对象是一个什么东西;

接口则主要用于类,这些类在基础水平上有所不同(即不同的、不相关的对象),但仍可以完成某些相同的任务,赋于对象具有某一个(或一些)行为。

接口是对动作的抽象,抽象类是对根源的抽象。

抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人。说明,他们都是人。人可以吃东西,狗也可以吃东西,你可以把"吃东西"定义成一个接口,然后让这些类去实现它.所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

四、两个关键字

1、as : 把一个类型转换为指定的引用类型,如果不能转换,则返回null

2、is :

检查对象是否是给定类型;

检查对象是否可以转换为给定类型;

而不是对象是某种类型。

C#进阶学习笔记(个人整理)的更多相关文章

  1. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

  2. iOS学习笔记-精华整理

    iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...

  3. iOS学习笔记总结整理

    来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...

  4. ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - ROSMapModify - ROS地图修改

    ROS进阶学习笔记(11)- Turtlebot Navigation and SLAM - 2 - MapModify地图修改 We can use gmapping model to genera ...

  5. java学习笔记系列整理说明

    java学习笔记系列整理说明 ​ 陆陆续续也巩固学习java基础也有一段时间了,这里整理了一些我认为比较的重要的知识点,供自己或者读者以后回顾和学习.这是一个学习笔记系列,有自己的整理重新撰写的部分, ...

  6. Java7编程高级进阶学习笔记

    本书PDF 下载地址: http://pan.baidu.com/s/1c141KGS 密码:v6i1 注:本文有空会跟新: 讲述的是jdk7的内容: 注关于java 更详细的内容请进入:<Ja ...

  7. PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type

    前言: 是自己在学习python进阶IO学习视频的时候的理解和笔记,因为很多都是本菜鸟学习时候的自己的理解,有可能理解有误. Content: - 抽象的概念和面向对象的概念?想要大概了解python ...

  8. 从实例学习 Go 语言、"基础与进阶" 学习笔记及心得体会、Go指南

    第一轮学习 golang "基础与进阶"学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  9. Spring MVC 学习笔记(整理)

    SpringMVC学习 1.概述 Spring MVC是一种基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行解耦,基于请求-响应模型帮助我们 ...

随机推荐

  1. Cloudera Manager卸载笔记

    1.通过管理平台分别停止组件服务和Cloudera Management Service 2.通过管理平台注销并移除Parcles (在控制台注销并移除,无论是安装的Parcles还是未安装的Parc ...

  2. [Android]JsonObject解析

    android和服务器进行交互的时候往往会有数据的传输,而数据中有一种类型就是Json型,这两天在研究API接口的问题,服务器返回的数据类型都是Json型的.例如: 1.接收到的json字符串分为两种 ...

  3. netty之==TCP粘包/拆包问题解决之道(一)

    一.TCP粘包/拆包是什么 TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在 ...

  4. xml schema数据类型

    1.简单数据类型 (1)内置简单数据类型 schema中定义了一些简单数据类型,包括primitive原始数据类型和derived派生数据类型,这些类型都是schema中使用的 最基本的数据类型,我们 ...

  5. Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用

    课程链接: 本节主要讲了以下几块内容 1 注解相关解析 2 代码演练 集合for循环的使用 2.1 list集合应用 2.2 map集合应用 2.3 集合排序(只对list有效,对map无效(list ...

  6. 【小程序报错】 TLS 版本必须大于等于 1.2

    服务器是windows 2008 server 环境是IIS7SSL是申请用的阿里免费.微信小程序发现wx.request,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2 直接说解决办法吧 ...

  7. (开发)ESLint - 代码规范

    参考文档:http://eslint.cn/ ESLint 是在 ECMAScript/JavaScript 代码中识别和报告模式匹配的工具,它的目标是保证代码的一致性和避免错误.在许多方面,它和 J ...

  8. sublime介绍常用插件和快捷键

    简介 Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来的,它最初被设计为一个具有丰富扩展功能的Vim. 是一个跨平台的编辑器,同时支持Windows.Linux.M ...

  9. FAT12格式的引导区实现

    org 07c00h ;================================================ jmp short START nop ; 这个 nop 不可少 ;这个结构将 ...

  10. While, DoWhile in WorkFlow.

    On 03/03/2010, in 4.0, WF, by bcakiroglu While Activity In a While activity, the activity in the Bod ...