# 1、DataSet xx :离线资料库
# 2、DataReader:连线资料库
# 3、事件托管:(object sender, EventArgs e)
前面的object用来传递事件的发生者,后面的EventArgs用来传递事件的细节
https://zhidao.baidu.com/question/107479680.html?qbl=relate_question_3
# 4、命名规则
```
namespace M1
{
public class C{}
}
```
可以表达成M1.C
# 5、新建project时候一般选择console solution
# 6、常量和变量
常量:
编译时常量const 需要一开始就赋值,如果是运行时常量readonly,则可以在运行时候在g构造函数中再赋值。
![](https://box.kancloud.cn/272b2ea53d818aa15d5c4df13e1f1fc9_693x277.png)
```
using System
public class Program
{
const abc = 900; //设定名叫abc的常量,值是900。常量类型一般用const表示
static void Main(string[] agrs)
{
Console.WriteLine("常量abc的值是:{0}", abc); //这里{0}必须写,否则出错
}
}
```
![](https://ws4.sinaimg.cn/large/006tNc79gy1fojsyrjd4jj30jo08v0tz.jpg)
## 变量类型
![](https://ws3.sinaimg.cn/large/006tKfTcgy1fr387u21m8j31hc0u0mzd.jpg)
## 变量的作用域
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr3kx174cwj31kw0w0kjl.jpg)
类体 => 成员变量
- 实例变量 `string x = "hello"; ` 实例变量只属于某个对象实例,所以调用时候需要先创建实例。
- 静态变量 ` static string x = "hello"; ` 静态变量是属于一整个class 类的
两者的区别:如果输入了`static ` 变量以后,则我们可以在该类的 static void main() 中直接调用
> 局部变量如果在外部用?没其他办法,最简单的就是直接加一个static
```
class Program()
{
static string x = "hello";
static void Main()
{
Console.WriteLine(x);
}
}
```
如果是用了实例变量,那么我们必须先用 Program 创建对象,否则会提示:
CS0120 C# An object reference is required for the non-static field, method, or property 对象引用于非静态的字段,方法或属性“Program.x”是必须的
![](https://ws3.sinaimg.cn/large/006tKfTcly1fr3klr0lhaj30il0du0uf.jpg)
正确做法如下:
```
class Program()
{
string x = "hello";
static void Main()
{
Program p = new Program();
Console.WriteLine(p.x); //注意这里括号里面写的是对象名p,而不再是变量名
}
}
```
![](https://ws1.sinaimg.cn/large/006tKfTcly1fr3krg8e52j30is0b8dhc.jpg)
## 转义字符
![](https://ws2.sinaimg.cn/large/006tKfTcgy1fr387uu9goj31hc0u0gp3.jpg)
![](https://ws3.sinaimg.cn/large/006tKfTcgy1fr3878tn7tj31hc0u0diy.jpg)
# 常量——一般常量名都大写
## 编译时常量,用const表示
需要初始化值,如`const int PI=3.14;` 一开始就定义,与顺序无关。
## 运行时常量,用readonly 表示
可定义时直接赋值,也可以借助Program()来执行。不能定义在具体对方法中,只能定义在类里面,或者是在构造函数Program里面初始化,其余不行。是一行运行的,所以有顺序。
```
class Program()
{
readonly int Price;
Program()
{
Price = 365;
}
static void Main()
{
……;
}
}
```
> 注意,如果是readonly时,那么代码是一行行读取的。
> 这时候如果先写了price3=price4*\2,再写Price4 = 55,那么price3的值只能是0。
![](https://ws2.sinaimg.cn/large/006tNc79ly1fr7sgtp4vgj30a304yjrr.jpg)
![](https://ws4.sinaimg.cn/large/006tNc79ly1fr7sdhizemj30j50cg0vh.jpg)
# 运算符
## 赋值运算
用=表示。 如k=5
## 关系运算符
`==, !=, <, >, <=, >= ` 等。但关系运算符不能连用。比如
`
console.writeline(a<b<c);
`
提示输出错误。因为系统是从左到右判断。先执行了a<b以后得到到是bool类型的值,再执行bool<c的判断,就会发生错误。
这时候可以用a<b && b<c; 即可
## 位运算符
作用的对象是二进制数。
比如:&、|、^、~
- 位与运算`&`,两个数都是1,才返回1。如`1 & 0`,返回0。
- 位或运算`|`,只要有一个是1,就返回1。如`1 | 0`,返回1。
- 位异或运算 `^`,两个都是0,或者两个都是1,则返回0,否则返回1。如`11 ^ 10`,返回01。
- 位取反运算`~`,把0变成1,把1变成0即可。
![](https://ws4.sinaimg.cn/large/006tNc79ly1fr8b44qddhj30j00b8wgg.jpg)
上述例子中用到了convert.toint32
## 移位运算
`<<` 左移位
数字转换成二进制以后,最左边到数(高位数)被移出去舍弃,右边的数补充0。也就是等于原来的数✖️2的n次幂。比如移2位就是原来数✖️2²。
`>>` 右移位
左边被填充进来。需要注意的是,如果是负数,那么填充的是1,如果是正数,那么填充的是0,相当于÷2的 n 次幂。
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr8bgto0xtj30fy0913zg.jpg)
## 条件运算
语句为 xxx?xxx:xxx。条件运算不能直接作为一句c#语句,而要定义一个变量来接收它的值。例如下面的result
但一般用sting result 写
```
static void Main()
{
int num = 50;
string result = num>40?"is true":"is false";
console.writeline(result);
console.readline();
}
```
嵌套使用:
**从右向左执行**
例如
```
static void Main()
{
int x = 5, y = 6, a = 1, b = 2;
int z = 0;
z = x > y ? x : a > b ? a : b;
Console.WriteLine(z);
Console.ReadLine();
}
```
![](https://ws4.sinaimg.cn/large/006tKfTcly1fr8nggia72j30hs09hjsl.jpg)
# 7、
```
using System;
namespace MyApp
{
class MyApp
{
static void Main(string[] agrs)
{
int a1 = 25;
int b1 = 30;
Console.WriteLine("{0} + {1} = {2}", a1, b1, a1 + b1);
//这里{0}, {1}, 是因为main中定义了(string[] agrs), 是个数组类型,所以默认 a1存放到数组的第一个
}
}
}
```
# 8、if null
创新和异常
`throw`字段
```
if ( value == "")
{
throw new ArgumentException()
}
```
# 9、new
new:关键字实例化
比如
struct Book
{
}
# 10、字符转换
## 隐式类型
默认一些类型可以互相转换,比如char类型可以转换成double int float类型。但bool类型只有true false两种结果,所以不能跟数值类型互相转换。
## 显式类型(强制类型转换)
1. 直接加(类型名)
把高精度转换为低精度的时候需要显式类型转换。比如直接加一个(int),注意这里有括号。
```
int b = (int)10.2
```
![](https://box.kancloud.cn/d26ad2913c23b661b5881f6b8961d156_676x543.png)
2. 或者用convert.to转换,这个类是.net自带的类。应用最多!如:
```
double a = 10.5;
int c = convert.toint32(a);
```
3. 用类型名.Parse(表达式),但只能针对数值类型。所以暂不用
```
double a = 10.5;
int c = Int.Parse(a.ToString());
```
# 11、运算符优先级和结合性
![](https://box.kancloud.cn/4c86b5244d7d891287fd32cd48984f5d_1001x555.png)
表格中从上到下变低。
![](https://box.kancloud.cn/aa25b5129ab276e263a5e10bfee6c8a0_979x459.png)
- 帮助文档 microsoft helo viewer
- c#开发环境及visual studio安装注意事项
- c#程序基本结构-基本语法
- Q1: public static void main(String[] args) 是什么意思
- Q2: c#命名空间+Main方法
- Q3:注释+命名规则+代码规则
- Q4: c#语句 system => console
- Q5: 数据类型 .net
- Q5: 常用名字、变量、运算符
- Q6: 对话窗输入-属性
- Q7: 递归
- Q8:决策分支、条件判断语句 if 语句
- Q9:数组
- Q10:字符串
- Q11:对象、类、访问权限、静态动态函数
- Q12:方法及参数——继承于类
- Q13:构造函数
- Q14:继承——base 关键字
- Q15:多态、虚方法、接口
- Q16:创建窗体应用、控件
- Q17:Ado数据访问、连接 sqlserver 数据库
- Q18: 读取数据command + DataRead( )、DataSet + DateAdapter
- Q19: Entity Framwork、entity 与 ADO.net的区别
- Q20: 对话框、文件、文件夹
- Q21: 导入excel数据、更新到 dbo 数据库中
- Q26: 获取 excel 中每个 sheet 的表名
- Q22: 两个窗体之间数据+方法传递
- Q23: 数学对象
- Q24: c#网站编写
- Q25: visual studio2017如何查看帮助
- Q27: c# dictionary 字典对象
- Q28: 数组与dataTable互相转化