1、复习
属性:保护字段的
构造函数:初始化对象
初始化对象:给对象的每个属性去赋值
什么时候会调用构造函数:当我们new的时候
面向对象中需要注意的两个关键字
this 1.代表当前类的对象 2.调用自己的构造函数
new 1.创建对象 2.隐藏从父类哪里继承过来的成员
base 调用父类的构造函数,在子类中调用父类的重名方法

什么是类?
类是模子,确定对象将会拥有的特征(属性)和行为(方法)
什么是对象?
对象是一个你能够看得到,摸得着的具体实体-万物皆对象(具体存在的东西)
类是模具,创建对象的模具,抽象的。
类是一种数据类型,用户自定义的数据类型
类组成:字段,属性,方法,构造函数等
对象是具体的,是类的具体实例,对象具有属性(特征)和方法(行为)
类中包含了数据(用字段表示)与行为(用方法(函数、功能)表示,方法为一块具有名称的代码)

2、访问修饰符
public 公开的,公共的
private 私有的,只能在当前类的内部访问,类中成员们,如果不加访问修饰符,默认就是private
procteced 受保护的,可以在当前类的内部访问,也可以再该类的子类中访问。
internal 在当前项目中都可以访问。
procteced internal 在当前项目和改类的子类中都可以访问
能够修饰类的访问修饰符只有两个,Internal和public

3、常用的关键字
this
1.代表当前类的对象
2.调用自己的构造函数
base
调用父类的成员
new
1.创建对象
2.隐藏父类的成员
virtual
标记一个方法是虚方法
abstract
抽象的
override
重写
interface
接口
partial
部分类
sealed
密封类:不允许被继承,但可以继承别人
return
1.在方法中返回要返回的值
2.立即结束本次方法
break
跳出当前循环
continue
结束本次循环,回到循环条件进行判断
static
静态的
struct
结构
enum
枚举
const
常量

4、虚方法,抽象方法
关于虚方法需要注意的几点:
1.父类中如果有方法需要让子类重写,则可以将该方法标记为virtual
2.虚方法在父类中必须有实现,哪怕是空实现。
3.虚方法子类可以重写(override),也可以不重写
关于冲向方法注意的几点:
1.需要用abstracy关键字标记。
2.抽象方法不能有任何方法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以子类必须将抽象成员重写。
5.抽象类不能实例化,
抽象类的作用:抽象类的作用就是为了让子类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7.还有抽象方法不能用static修饰

5、接口
1.接口中只能包含方法(属性、时间、索引器也都是方法)
2.接口中的成员都不能有任何实现。光说不做
3.接口不能被实例化
4.接口中的成员不能有任何访问修饰符。(默认为public)
5.实现接口的子类必须将接口中的所有成员全都实现。
6.子类实现接口的方法时,不需要任何关键字,直接实现即可。
7.接口存在的意义就是为了多态。

接口是什么?什么时候使用接口?使用接口的目的是什么?多态
鸟会飞 飞机也会飞
不能把飞提取出来作为父类,只能把飞写成一个接口
public interface IFlyable
{
void fly();
}

public class Bird
{

}
public class QQ : Bird
{

}
public class Maque : Bird, IFlyable
{
public void fly()
{
Console.WriteLine("鸟会飞");
}
}

public class Plane:IFlyable
{
public void fly()
{
Console.WriteLine("飞机会飞");
}
}

IFlyable fly = new Maque();
fly.fly();
Console.ReadKey();

继承,先写父类,再写接口

属性
构造函数
重载,多态

6、字符串
1.字符串的不可变性
2.字符串可以看做是char类型的只读数组

7.高效的StringBuilder
不需要开辟新的string空间,可以添加,拼接,插入,替换字符串,最后再toString转为string类型
StringBuilder sb = new StringBuilder();
sb.Append("张三");
sb.Append("李四");
sb.Append("王五");
sb.Append("赵六");
sb.Insert(1, 123);
sb.Replace("李四", "颜色");
sb.ToString();
Console.WriteLine(sb);
Console.ReadKey();
Console.ReadKey();

表格
StringBuilder sb = new StringBuilder();
sb.Append("<html>");
sb.Append("<head>");
sb.Append("</head>");
sb.Append("<body>");
sb.Append("<table border='1px' cellpadding='0px' cellspacing='0px'>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("<tr>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("<td>星期一</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("</body>");
sb.Append("</html>");
webBrowser1.DocumentText = sb.ToString();

7、集合
ArraryList
Hashtable
List<T>
Dictionary<TKey,Tvalue>

//ArrayList list = new ArrayList();
//list.Add();
//list.AddRange();
//键值对集合
//Hashtable ht = new Hashtable();
//ht.Add()
//List<int> list = new List<int>();
//list.Add(); 添加单个元素
//list.AddRange();添加集合
//list.Insert();插入
//list.InsertRange();插入集合
//list.Remove();移除
//list.RemoveAt();根据下标移除
//list.RemoveRange();移除一定范围的元素
//list.Contains();判断是否包含

//list.RemoveAll();

List<T>类似于ArrayList,ArrayList的升级版。
各种方法:Sort(),Max(),Min(),Sum()...
DIctionary<K,V>类似于Hashtable,Hashtable的升级版。
推荐使用泛型集合。
T,K,V就像一把锁,锁住集合值能存在某种特定的类型,这里的T,K,V也可以是其它字母
泛型集合可以进行foreach遍历,是因为实现了IEnumerable<T>具有了GetEnumerator()方法

//Dictionary<int, string> dic = new Dictionary<int, string>();
//dic.Add(1, "张三");
//dic.Add(2, "李四");
//dic.Add(3,"王五");
//dic.Add(4, "赵六");
////用add直接覆盖添加会报错
//dic[4] = "还是赵六";
//foreach (KeyValuePair<int,string> kv in dic)
//{
// Console.WriteLine("{0}-----{1}",kv.Key,kv.Value);
//}
//Console.ReadKey();
8、装箱或者拆箱
装箱:就是将值类型转换为引用类型
拆箱:就是将引用类型转换为值类型
值类型:bool int double char struct enum decimal 栈
引用类型:string 数组 集合 interface object 自定义类 堆
拆箱或者装箱的两种类型必须具有集成

集合转为数组
int[]Ji= list.ToArray();

集合初始化器
List<int> list = new List<int>() { 1, 2, 3, 5, 64, 589, 642, 0, 36, 1000 };

9、结构和类的区别
类型
结构:值类型 栈
类:引用类型 堆

声明的语言:class struct

在类中,构造函数里,既可以给字段赋值,也可以给属性赋值。构造函数是可以重载的。
但是,在结构的构造函数当中,必须只能给字段赋值
在结构的构造函数当中,我们需要给全部的字段赋值,而不能去选择的给字段赋值

调用:

结构是否可以New?
在栈开辟空间 结构new 调用结构的构造函数

结构和类的构造函数:
相同点:不管是结构还是类,本身都会有一个默认的无参数的构造函数
不同点:当你在类中写了一个新的构造函数之后,那个默认的无参数的构造函数都被干掉了。
但是,在结构当中,如果你写了一个新的构造函数,那个默认的无参数的构造函数依然在。

如果我们只是单纯的存储数据的话,我们推荐使用结构。
因为结构的值是分配在栈上的,比较节省空间。单纯的存储数据,不涉及面向对象。

如果我们想要使用面向对象的思想来开发程序,我们推荐使用我们的Class,因为结构不具备面向对象的特征

C#基础笔记(第二十天)的更多相关文章

  1. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  2. php代码审计基础笔记

    出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...

  3. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  4. MYSQL基础笔记(五)- 练习作业:站点统计练习

    作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...

  5. MYSQL基础笔记(四)-数据基本操作

    数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...

  6. MYSQL基础笔记(三)-表操作基础

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

  7. MYSQL基础笔记(二)-SQL基本操作

    SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...

  8. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  9. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

随机推荐

  1. guicorn 是什么

    guicorn 是什么? 在回答问题之前我们先来看看 web服务器的典型过程[1] 1. 建立链接:如果没有连接,要建立连接 2. 接收请求:对客户端发来的请求进行解析. 3. 处理请求:转发给预定义 ...

  2. python manage.py runserver 0.0.0.0:8000

    python manage.py runserver 这种命令行,可以在服务器端输入IP:8000直接访问 在 python manage.py runserver 127.0.01:8000 在服务 ...

  3. Android Studio中由于gradle插件版本和gradle版本对应关系导致的编译失败的问题

    今天在Android Studio中导入新项目,import之后编译报错,报错信息基本都是和版本相关,查询gradle版本相关知识,了解到gradle插件版本和gradle版本有相应的匹配关系,对应如 ...

  4. Eclipse can not find the tag library descriptor for http://java.sun.com/jsf/*

    问题页面: <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%> <%@ ta ...

  5. CentOS上安装 jdk

    先下载最新的jdk版本 文件名:jdk-8u5-linux-x64.rpm 将文件通过winscp上传到/usr/local目录中 rpm -ivh jdk-8u5-linux-x64.rpm 系统会 ...

  6. Unpacking Argument Lists

    [Unpacking Argument Lists] The reverse situation occurs when the arguments are already in a list or ...

  7. 理解UV贴图

    一.理解UV贴图UVs是驻留在多边形网格顶点上的两维纹理坐标点,它们定义了一个两维纹理坐标系统,称为UV纹理空间,这个空间用U和V两个字母定义坐标轴.用于确定如何将一个纹理图像放置在三维的模型表面.本 ...

  8. leetcode 121 股票买卖问题系列

    描述: 给一些列数字,表示每条股票的价格,如果可以买卖一次(不能同一天买和卖),求最大利益(即差最大). 其他三道问题是,如果能买卖无限次,买卖两次,买卖k次. 题一: 实质是求后面一个数减前一个数的 ...

  9. 28-python 中格式对齐之中文格式对齐问题

    一般的可以按这个搞,但是中文就会有问题: python基础_格式化输出(%用法和format用法) 对于 print('1234567890' * 10)print('%10s' % '今天好')pr ...

  10. sqlserver 开窗函数Over()的使用

    利用over(),将统计信息计算出来,然后直接筛选结果集 declare @t table(ProductID int,ProductName varchar(20),ProductType varc ...