# 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構造函數中再賦值。

```
using System
public class Program
{
const abc = 900; //設定名叫abc的常量,值是900。常量類型一般用const表示
static void Main(string[] agrs)
{
Console.WriteLine("常量abc的值是:{0}", abc); //這里{0}必須寫,否則出錯
}
}
```

## 變量類型

## 變量的作用域

類體 => 成員變量
- 實例變量 `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”是必須的

正確做法如下:
```
class Program()
{
string x = "hello";
static void Main()
{
Program p = new Program();
Console.WriteLine(p.x); //注意這里括號里面寫的是對象名p,而不再是變量名
}
}
```

## 轉義字符


# 常量——一般常量名都大寫
## 編譯時常量,用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。


# 運算符
## 賦值運算
用=表示。 如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即可。

上述例子中用到了convert.toint32
## 移位運算
`<<` 左移位
數字轉換成二進制以后,最左邊到數(高位數)被移出去舍棄,右邊的數補充0。也就是等于原來的數??2的n次冪。比如移2位就是原來數??22。
`>>` 右移位
左邊被填充進來。需要注意的是,如果是負數,那么填充的是1,如果是正數,那么填充的是0,相當于÷2的 n 次冪。

## 條件運算
語句為 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();
}
```

# 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
```

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、運算符優先級和結合性

表格中從上到下變低。

- 幫助文檔 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互相轉化