目录
1.数据类型
2.运算符
3.条件语句
4.循环语句
5.数组
6.排序
7.方法
8.OOP 面向对象编程
(1)类 和 对象
(2)构造方法
(3)面向对象编程的三大特性
封装性
继承性
多态性
9.枚举
10.关键字 out ref params
out 输出参数
ref 引用参数
params
11.结构
12.集合
注意int类型的最大值是2147483647
C#中的小数默认形式下是double类型的,对于定义float类型的变量是 记得加上小写f或者大写F 进行类型转换
++(--)变量 先执行加一操作 再执行其他操作
变量++(--) 先执行其他操作 再执行其他操作
static void Main(string[] args)
{
int x=3;
Console.WriteLine(x++);
Console.WriteLine(x);
}
第一个打印的结果是3 // 先执行打印 再执行++操作
第二个打印的结果是4
(1)算术运算符
++ -- + - * / %
(2)比较运算符
> < ==
(3)赋值运算符(包括复合运算符)
= += -=
(4)逻辑运算符
&& || ! 与或非
比较表达式&&比较表达式 当第一个不成立时,后面的式子将不再执行
比较表达式||比较表达式 执行到比较表达式为真之后将不再执行
(5)三元运算符(条件运算符)
条件?结果1:结果2
返回值的类型是根据第一处和第二处的类型决定的
(6)位运算符(二进制)
if(条件表达式)
{
代码段
}
else if()
{
代码段
}
....
else
{
代码段
}
switch()中可以包括所有的整数类型同时还可以有 string 字符串 枚举等 因此 case后面对应的值的类型也要相应的变化
开关语句
switch (值0) // 值对应case后面的值
{
case 值0: // 每一个case必须用 break结尾隔开
代码块;
break;
case 1:
代码块;
break;
default: //当所有内容不满足之后,则会执行default中的代码内容
代码块;
break;
}
***** return 结束方法的执行
(1)中止循环 break和continue的区别
break 中止本层循环 跳出switch循环体 或者 循环体
continue中止本次循环 进行下一次循环
(1)whille
(2)do...while
(3)for
数组长度一旦确定,则不能改变;
数据类型氛围两种:值类型和引用类型,而数组则属于引用类型;
(1)Array.cs 数组的操作工具 类
Sort() 对数组进行排序,默认是按照升序排列
Reverse() 将整个数组反转
Copy() 数组的复制 从一个数组复制到另一个数组上
Clear() 数组的清除
(1)冒泡排序
相邻两个两两比较,每一轮排序出最大的一个数或者最小的一个数
(2)选择排序(顺序排序)
方法又称为“函数”
(1)方法的定义
在定义方法的代码块时,尽量不要在方法块中写入打印语句
(2)方法的调用
(3)参数列表
形式参数和实际参数
变量:局部变量和全局变量
(4) 方法的重载
可以对传过来的实参进行自动向上匹配;
(5)方法重载的条件:
多个方法的名字相同
方法的参数个数或者参数类型上不相同
能否构成重载跟返回值类型无关
面向对象编程:属于一种高级编程思想
面向过程编程:属于一种偏底层编程思想
类中的字段和方法
构造方法的方法名和类名相同
一个类中可以有多种构造方法,构造方法可以有参数也可以无参数
构造方法没有返回值,void也不能添加 (例如: public Book())
new创建对象 为其赋值
定义方法时,最后不要出现打印语句
广义封装:从整个项目的设计角度出发
狭义封装:通过访问修饰符控制类中成员的访问权限(作用 范围不同)
访问修饰符:public private protected internal....
进行封装时,一般字段设置为私有的,方法设置为共有的。如果对私有字段访问时,可以提供间接访问的方法,get()set()方法
用来保护数据
属性语法:
public string RoleName
{
get{ retrun roleName; }
set{ roleName = value;}
}
Equals:用来作比较,返回一个bool值,并且严格区分大小写
属性分为标准属性和自动属性
标准属性:
自动属性:用于简单获取字段值或者设置字段值,不需要业务逻辑判断;会自动添加一个对应的私有字段;get和set必须成对属性,不能只读或者只写,set中不能添加业务逻辑判断的代码;
快捷键:prop + Tab键
// 标准属性
private int no;
public int No
{
get{return no;}
set{no=value;}
}
//相当于 自动属性
public int No
{
get;
set;
}
继承:提高代码的复用性
(1)子父类 单层继承
(2)继承具有传递性
class A;
class B:A;
class C:B;
C继承了B中的内容,同时也隐式的继承了A中的内容
(3)子类会继承父类的所有内容,但是会有一些特殊情况:
父类的私有内容(表面上看是访问不到,但是已经继承了,可以通过反射等操作拿到数据)
父类的构造方法(构造方法不能继承,但是子类可以使用)
父类中定义了方法,而子类有定义了相同的方法,该如何进行调用? 关键字:virtual override new base
(4)特殊情况:构造方法
当创建一个子类对象时,先进入到子类的构造方法,在子类中的构造方法中,会默认省略了:base() 先会调用父类的无参数构造方法,再会调用子类的构造方法
不写:base() 调用父类的无参数
写:base() 调用父类的无参数
写:base(*****) 调用父类对应参数的构造方法
构造方法参数内容时,在父类中调用,就在父类中进行赋值,在子类调用,在子类中进行赋值
(5) 关键字 virtual override new
父类
calss dulei
{
// virtual 表示虚函数 可以通过子类添加的override关键字进行重写操作
puliv virtual int demo()
{
retrun 0;
}
}
calss zilei
{
public override int demo()
{
retrun 1;
}
}
calss zilei
{
// 子类不想使用父类中的方法,并且不想继承父类的方法
// new 关键字对父类中的定义的demo方法进行隐藏,使用时按照new出来的新方法进行执行
new public void demo()
{
}
}
(6) 小知识点: 所有类默认继承Object类
(1)Question q =new SingelQuestion();
父类变量创建子类对象
父类变量指向子类对象
父类引用指向子类对象
父类引用引用子类对象
(2)向上转型:使用“父类对象指向子类对象”创建对象的过程称为向上转型
向上转型后,就有了两种类型,一种类型是父类型,另一种类型是子类型
代码阶段属于父类型
运行期间会属于子类型
如果子类重写了,就会执行子类方法,如果没有重写,就会执行父类的方法,如果父类没有的话,就会报错
(3)多态数组 方法参数 方法返回值
(1)值类型
简单类型(13种)
enum枚举类型
(2) 引用类型
(3) 枚举类型中每一个枚举项都是一个常量
out 修饰的变量作为参数时,可以不用提前赋值,可以在之后的方法中进行赋值
static void Main(string[] args)
{
int a;
int b;
int sum;
int sub;
int mul;
int div;
Game(out a, out b,out sum,out sub,out mul,out div);
}
public static void Game(out int a,out int b,out int sum,out int sub,out int mul,out int div)
{
a = 2;
b = 3;
sum = a + b;
sub = a - b;
mul = a * b;
div = a / b;
}
ref修饰的变量作为参数传递时,一定要提前赋值,不赋值会报错
ref传递时,传递的是变量的地址
// 当没有ref的时候 打印出a的值为1000 加上ref关键字后 打印a的结果为100
// ref 对a 所在的地址进行修改操作 所以传递过去的是a的地址
static void Main(string[] args)
{
int a = 1000;
Change( ref a);
Console.WriteLine(a);
}
public static void Change(ref int a)
{
a = 100;
}
作用于容器类型或者数组类型
static void Main(string[] args)
{
Result(10, 20, 30);
}
//通过params的修饰 可以进行自动创建于传递过来的参数长度相同的数组
public static int Result(params int[] a)
{
int sum = 0;
foreach (int item in a)
{
sum += item;
}
return sum;
}
(1)结构 属于一种值类型的数据结构
值类型:储存的是值,栈内存 传递的是值
简单值类型(13种) 枚举类型
引用类型:存储的是地址,堆栈中 传递的是地址
new关键字——引用类型,interface 接口 ,委托,string类型
(2)结构的基本定义方法和要求
struct 结构名 { } 结构的定义和类的定义一样
类中大部分的内容在结构中都能够定义 如字段,属性,普通的方法 ,构造方法(含有参数的);
无参数的构造方法不能在结构中定义
(3)类类型:属于引用类型,存放在堆栈当中
结构类型 :值类型存放于栈内存中
(4) 类的使用:如果描述的对象是一种比较复杂的结构,或者字段较多时就要使用类
结构的使用:如果要描述一种包含多个值,但是是一种轻量级的数据类型时,使用结构
(1)ArrayList 已经弃用了
(2)List
LIst
(3)Dictionary 字典
基本语法 :Dictionary
存储数据的方式:通过键值对的方式进行存储 key value ;key的值不能重复 value的值可以重复;key值和value值都可以拿到