c#基础

c#语言特点

  • C#是微软公司发布的一种面向对象的、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言
  • C#是一种安全的、稳定的、简单的、优雅的,由C和C衍生出来的面向对象的编程语言。它在继承C和C强大功能的同时去掉了一些它们的复杂特性
  • C#是面向对象的编程语言

什么是 .NET?

.NET 是由 Microsoft 创建的开源开发人员平台,用于生成许多不同类型的应用程序。

可以使用 C#、F# 或 Visual Basic 编写 .NET 应用。

  • C# 是一种简单、现代、面向对象和类型安全的编程语言。
  • F# 是一种编程语言,利用它可轻松编写简洁、可靠且性能出色的代码。
  • Visual Basic 是一种易于使用的语言,简单语法便于生成类型安全、面向对象的应用。

c#语法基础

cs文件结构

结构展示

  1. 程序的第一行using System; using关键字用于在程序中包含System命名空间。一个程序一般有多个using语句

  2. 下一行是namespace声明。一个namespace是一系列的类。 WebApplication1 命名空间包含了类Program

  3. 下一行是class声明。类Program包含了程序使用的数据和方法声明。类-般包含多个方法。 方法定义了类的行为。在这里,Program类只有一 个Main方法。

  4. 下一行定义了Main方法,是所有C#程序的入口点。Main方法说明当执行时类将做什么动作。

  5. Main方法通过方法体中的语句指定它的行为。

注意:

  • C#大小写敏感的。

  • 所有的语句和表达式必须以分号;结尾。

  • 与Java不同的是,文件名可以不同于类的名称。

C#是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种对象组成。相同种类的对象通常具有相同的类型。

案例:
以人类为例,从人类中诞生出的具体对象“C罗”和“梅西”,同属人类,故俩人类型相同。

关键字

关键字,是对编译器有特殊意义预定义保留标示符,它们不能在程序中用作标示符

  • using关键字

    在任何C#程序中的第一条语句都是: using System;

    using关键字用于在程序中包含命名空间。一个程序可以包含多个using语句。

  • class关键字

    class关键字用于声明一个类。

  • C#的注释方式

    1. // 单行注释
    2. /**/ 多行注释
    3. /// 文档注释
    4. 注释的作用:
    • 解释:说明代码作用

    • 注销:将暂时不需要的代码注销

铭记:

  1. 不写注释是流氓
  2. 名字瞎起是扯淡
  3. 相比注销,注释意义更大
  4. 要做到别人一看就能看懂

变量

  • 变量是一个供程序存储数据盒子。在C#中,每个变量都有一个特定的类型,不同类型的变量其内存大 小也不尽相同。

  • C# 中提供的基本类型大致分为以下几类:

    类型 举例
    整数类型 byte、short、int、long
    浮点型 float、double
    十进制类型 decimal
    布尔类型 bool
    字符类型 string、char
    空类型 null

表达式

  • 表达式由**操作数(operand)运算符(operator)**构成。运算符的示例包括+-\*/new。操作数的示例包括文本、字段、局部变量和表达式。

  • 当表达式包含多个运算符时,运算符的优先级(precedence)控制各运算符的计算顺序。例如,表达式x + y * zx + (y * z)计算,因为*运算符的优先级高于+运算符。

  • (了解)大多数运算符都可以重载(overload)。运算符重载允许指定用户定义的运算符实现来执行运算,这 些运算的操作数中至少有一个,甚至所有操作数都属于用户定义的类类型或结构类型。

  • 下表总结了C#简单常用的运算符,并按优先级从高到低的顺序列出各运算符类别。同类别中的运算符 优先级相同。

类别 表达式 说明
基本 x.m 成员访问
x(...) 方法和委托调用
x[...] 数组和索引器访问
newT(...) 对象和委托创建
newT(...){...} 使用初始值设定项创建对象
new{...} 匿名对象初始值设定项
newT[...] 数组创建
一元 +x 恒等
-x 求相反数
!x 逻辑求反
~x 按位求反
++x 前增量
--x 前减量
x++ 后增量
x-- 后减量
(T)x 将x显示转换为类型T
二元 x * y 乘法
x / y 除法
x % y 取余
x + y 加法,字符串串联
x - y 减法
x << y 位左移
x >> y 位右移
x < y 小于
x > y 大于
x <= y 小于或等于
x >= y 大于或等于
x is T 如果 x 位 T ,返回true,否则false
x as T 返回转换为类型 T 的 x ,如果 x 不是 T 则返回null
x == y 等于
x != y 不等于
x & y 整形按位与 ,布尔逻辑AND
`x y`
x && y 且,当 x 为true时,才对 y 求值
`x
x ?? y 如果 x 为null,则计算结果为 y,否则为 x
三元 x ? y : z 如果 x 为true,对 y 求值,x 为false,对 z 求值
赋值或匿名函数 x = y 赋值
x = x + y 复合赋值
(T x) => y 匿名函数(lambda表达式)

数组

数组

  • 数组是一组相同类型的数据。

  • 数组中的数据需要通过数字索引来访问。

数组的声明

  • 数组的声明需要使用new关键字。

  • 在声明数组时,可以使用{}来初始化数组中的元素。

  • 如果在数组声明之初没有使用大括号来初始化数组中的元素,则需要指定数组的大小。

  • 在声明初始化有元素的数组时,也可以指定数组大小。

1
2
3
4
5
6
//声明没有元素的数组     
int[] ints = new int[6]
//声明初始化有元素的数组
int[] ints = new int[]{1, 3, 4, 5}
//在声明初始化有元素的数组时,也可以指定数组大小
string[] strings = new int[5]{"H", “E", "L",“L","0"}

通过索引获取数组中的元素。

  • 给数组指定长度时,数组准备存放多少元素,长度就设置为多少。
  • 用索引获取数组内的元素时,索弓|从0开始获取。
  • 所以数组中最大的索引数字,比指定数组长度小1。
1
2
3
4
5
6
//声明初始化有元素的数组  
int[] ints = new int[]{1, 345}
//获取数组中第1个的元素。
int i1 = ints[0];
//给数组内的元素赋值
ints[0] = 1

C#面向对象

类与对象

  • 类和对象的概念

  • 类和对象的关系

  • 类的设计

  • 是模板,对象是根据这个模板创建出来的,应该先有类,再有对象

  • 类只有一个, 而对象可以有很多个

    • 不同的对象之间属性的具体内容可能各不相同
  • 类中定义了什么属性和方法,对象中就有什么属性和方法,不可能多,也不可能少

集合

ArrayList的使用

  • ArrayList是.NET Framework提供的用于数据存储和检索的专用类
  • 它是命名空间System.Collections下的一部分

ArrayList arrayList=new ArrayList();
arrayList.Add(123); //将数据新增到集合结尾处
arrayList.Add(“abc”); //将数据新增到集合结尾处
arrayList[2]=345; //修改指定索引的数据
arrayList.RemoveAT(0); //移除指定索引处的数据
arrayList.Remove(123); //移除内容为123的数据
arrayList.Insert(0,“hello world”); //再指定索引处插入数据

List list = new List(); // 第一种初始化方式
list.Add(123); // 新增数据到结尾处
List intList = new List // 第二种初始化方式
{
123,
456,
789
};
intList[2] = 345;
intList.RemoveAt(0); // 删除指定索引处的数据
intList.Remove(123); // 删除内容为123的数据
intList.Insert(0, 6688);

Dictionary字典的使用

  • 在声明Dictionary字典时,需要同事为其声明Dictionary字典内的键与值的类型

  • 示例:Dictionary<int, string> dictionary = new Dictionary<int, string>();

键与值可以是任何类型,但是键必须在设置时是唯一的,而值可以不唯一,就好比每个学生的学号必须是唯一的,而所有的成绩可以不唯一。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dictionary<int, string> dictionary = new Dictionary<int,  string>();
//两种赋值方式
// 方 式 一 :Add 方 法 赋 值
dictionary.Add(1, "98分");
dictionary.Add(2, "92分");
dictionary.Add(3, "89分");
dictionary.Add(1, "88分"); //系统会报错
//方式二:索引器赋值
dictionary[1] = "88分"; //系统不会报错
dictionary[4] = "99分";
//方式三:对象初始化器
Dictionary<string, string> dictionary2 = new Dictionary<string, string>() {
{"A","aa" },
{"B","BB" },
{"C","CC" }
};

注意dictionary[1]方式既可以赋新值可以修改原来已键有的值,类似于数组索引器的使用, 所以可以使用之前已使用过的键。但是Add方法不可以添加已有键的值。

1
2
3
4
5
6
7
8
9
10
//获取键为1的值  
//方式一:索引器取值
string value = dictionary[1];
//方式二:foreach遍历取值
foreach (KeyValuePair<string, string> item in dictionary) {
int key = item.Key;
string value = item.Value;
}
//移除键为1的键值对
dictionary.Remove(1);

总结

foreach的使用

  • foreach就是传说中的增强for循环或者称作foreach循环

  • foreach对遍历字典或集合具备天然优势,效率高过for循环

3.1 foreach操作数组

1
2
int[] ints= {123456};
foreach (int item in ints){ //每次循环,其item都是整型数组中的一个元素 }

3.2 foreach操作集合

1
2
List<int> intList = new  List<int>() { 1, 23, 45, 6 }; 
foreach (int item in ints){ //每次循环,其item都是List集合中的一个元素 }

3.3 foreach操作字典

1
2
3
4
5
6
7
8
9
Dictionary<string, string> dictionary = new Dictionary<string,  string>() {  
{ "A","aa"},
{ "B","bb"},
{ "C","cc"},
};
foreach (KeyValuePair<int, string> item in dictionary) {
int key = item.Key;
string value = item.Value;
}

c#和SqlServer连接