要查看帮助文档,可以选中相关词,直接按 F1,就可以启用帮助文档了。
# 程序基本结构
![](https://ws2.sinaimg.cn/large/006tKfTcly1fr1ghetps8j31kw0w0kjm.jpg)
# 常用关键字
![](https://box.kancloud.cn/9a73a4a25e41250663672673e184d3a0_658x302.png)
# 代码编写规范
![](https://box.kancloud.cn/054d1f23cae82aa4bd2a0ff2b7f19d34_567x362.png)
# 命名规范
![](https://box.kancloud.cn/b62c8b69fd4c6fae7718ad0d270fb0d2_668x298.png)
w3c参考教程:
https://www.w3cschool.cn/csharp/csharp-data-types.html
以及微软教程:
快速入门
https://docs.microsoft.com/zh-cn/dotnet/csharp/quick-starts/
# 与 ROR 对比
1. ror 中把 mvc 分开,但 c#里面把三个部分合并,比较混乱;
2. 每个句子都以 “;” 分号结束;命令语句的大小写非常严格;
3. 变量类型在一开始就指定:`int a = 4`; 意思是 a 类型是整形;
ROR中,把类型写在变量后面:`a.to_i = 4`;
4. 在变量后面可以直接跟method,比如`message.ToUpper()`;表示把 message 这个变量里面的字母全部变为大写(用的是 ToUpper() 这个命令);每个 method 后面都必须跟一个括号,括号里面可以直接写变量名称,或者直接不写;
5. c#不像 ror 一样,变量改变了,就默认返回最后的变量值。c#中,可以从上到下打印,如上述例子。变量trimmedmessage名字不变,但引用的`message. xxx` 内容变了。但整体程序执行的时候,仍按从上到下打印一遍。
![](https://box.kancloud.cn/11fd655cd39f1695c625dae32f2be2e9_438x412.png)
6. 一般在自己定义的类里面,写自己的方法,最后实现的时候,一般在class program(){}这个类当中显示实现。比如在program里面写console.writeline(); console.readline()等,这些真正被看到到最终效果。
hello,world
# 输入 hello,world
## 1 方法1:
直接写
```
using System
namespace HelloApplication
{
class HelloWorld
{
static void Main(string[] args)
{
/* my first c# app*/
Console.WriteLine("Hello amy");
Console.ReadKey();
}
}
}
```
## 2 方法2:
用变量写
```
using System
namespace HelloApplication
{
static void Main(string[] agrs)
{
class HelloWorld
{
/*my first c# app*/
var name = "amy"; //记得字符型变量要用引号
Console.WriteLine("Hello" + name + "!");
Console.ReadKey;
}
}
}
```
## 3 方法3:
用字符插入
```
using System
namespace HelloApplication
{
static void Main(string[] agrs)
{
class Helloworld
{
var name = "amy";
Console.WriteLine($"Hello {name}!"); //**$和引号之间不能有空格**
}
}
}
```
## 4 方法4:
用ToUpper()函数 is a method you can invoke on a string, like the name variable. It will return the same string, converted to uppercase.
```
using System
namespace HelloApplication
{
static void Main(string[] agrs)
{
class Helloworld
{
var name = "amy";
Console.WriteLine($"Hello {name.ToUpper()} !");
}
}
}
```
# 输入字符串集合
https://docs.microsoft.com/zh-cn/dotnet/csharp/how-to/index#strings
```
var names = new List<string> {"amy", "tony", "pony"};
foreach (var name in names)
{
Console.WriteLine($"Hello {name.ToUpper()}");
}
```
## 5 空格排版的使用1
```
string message = "Hello world";
Console.WriteLine($ [ { message} ]); //注意,{}花括号里面的内容,空格多少都不影响,但花括号外面的空格内容对排版有影响。
```
显示结果如下:
![](https://ws2.sinaimg.cn/large/006tNc79ly1fnxs1tctybj305h00vmx0.jpg)
## 6 空格排版的使用2
```
string message = " hello world ";
Console.Write($"[{message}]");
string trimmedmessage = message.TrimStart();
Console.WriteLine($"[{trimmedmessage}]");
trimmedmessage = message.TrimEnd();
Console.WriteLine($"[{trimmedmessage}]");
trimmedmessage = message.Trim();
Console.WriteLine ($"[{trimmedmessage}]");
```
得到以下情况:
![](https://ws1.sinaimg.cn/large/006tNc79ly1fnxvrav4ekj307u02oq2x.jpg)
> **c#不像 ror 一样,变量改变了,就默认返回最后的变量值。c#中,可以从上到下打印,如上述例子。变量trimmedmessage名字不变,但引用的message. xxx 内容变了。但整体程序执行的时候,仍按从上到下打印一遍。**
![](https://box.kancloud.cn/11fd655cd39f1695c625dae32f2be2e9_438x412.png)
> **在变量后面可以直接加“.xxx”,比如“message.ToUpper()”,可以直接弄成全部大写。或“message.Replace”可直接替换。“.”点后面的叫“方法 method”。**
## 7 字符替换
```
string message = "hello";
Console.WriteLine(message);
message = message.Replace("hello", "bye");
Console.WriteLine(message);
```
得到:
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxvw43m8cj303402p3yd.jpg)
## 8 直接变成全部大写或全部小写:
```
string message = "Hello";
Console.WriteLine(message);
Console.WriteLine(message.Toupper());
Console.WriteLine(message.ToLower());
```
得到:
![](https://ws1.sinaimg.cn/large/006tNc79ly1fnxw1x2levj302t03jt8l.jpg)
## 9 搜索文本
```
string message = "You say goodbye, and I say hello";
Console.WriteLine(message.Contains("goodbye"));
Console.WriteLine(message.Contains("greetings"));
```
得到:
false
true
或者StartWith/EndWith:
```
string message = "you say goodbye and I say hello";
Console.WriteLine(message.StartsWith("you"));
Console.WriteLine(message.EndsWith("hello"));
```
得到:
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxwem2y1mj3038030t8k.jpg)
# 3 数学计算 Math.PI
https://docs.microsoft.com/zh-cn/dotnet/api/system.math.pi?view=netframework-4.7.1
# 4 分支和循环
## 10 while循环 while语句
```
int counter = 0; //需要在一开始就指定数据类型
while (counter < 10 ) //这里不需要分号,用花括号包起来的命令都不需要再分号。
{
Console.WriteLine(counter);
counter++;
}
```
得到:0-9 一共10个数。
![](https://box.kancloud.cn/2b82820264105b1f1b9b53eee4aeb738_97x162.png)
与 ror 对比:
ror中,`while...end`语句与 end 配套。`if...elsif...end`
语句也需要 end结尾。
![](https://ws3.sinaimg.cn/large/006tNc79ly1fnxxnth1w0j30al05rt8r.jpg)
## 11 do...while 循环 do...while语句
```
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
```
与前面 while 语句作用一样。
## 12 for循环 for 语句
```
for (int counter = 10; counter < 10; counter++)
{
Console.WritelLine(counter);
}
```
说明:for 语句第一句是声明变量 counter 以及初始值;第二句是声明变量的执行条件,也就是当counter在小于10的时候,这个 for 循环将一直执行;最后一句是执行了一遍以后的iterator,也就是迭代:当执行了一次 for 循环以后,对变量如何操作,本例中,是将变量counter值加一处理。for 的句子之间用分号隔开。
支持,大家已了解 C# 语言中的 if 语句和循环构造。看看能否编写 C# 代码,计算 1 到 20 中所有可被 3 整除的整数的总和。 下面提供了一些提示:
% 运算符可用于获取除法运算的余数。
if 语句中的条件可用于判断是否应将数字计入总和。
for 循环有助于对 1 到 20 中的所有数字重复执行一系列步骤。
```
int a, sum = 0;
for(a = 1; a < 20 ; a++ )
{
if (a % 3 == 0)
{
sum += a;
}
}
Console.WriteLine(sum);
```
得到:
![](https://ws2.sinaimg.cn/large/006tNc79ly1fny8ya018fj3034029744.jpg)
> console.write语句写在 for 循环外面,能得到一个最终值,如果写在 for 语句里面,则得到所有过程值:
![](https://ws4.sinaimg.cn/large/006tNc79ly1fny8zj93baj30830e4aae.jpg)
## 13 public 和 private
`public class` 意思就是声明公共类,大家可以存储和读取。
`private class` 就是private 是私有的資料(隱藏資料.保密資料)
意思是除了自己以外,沒有人能存取這段資料,除非你設一個窗口讓它存取,否則沒有人能變更這段資料(只適用該類別的成員函數)。
如果不声明的话,默认的 class 是 internal class。也就是在该专案中是公共类。internal class 只能在本专案中公共,但public class 则可夸专案调用。
## 14 内插字符串
```
public class Vegetable
{
public Vegetable(string name) => Name = name;
public string Name { get; }
public override string ToString() => Name;
}
public class Example
{
public enum Unit { item, pound, ounce, dozen };
public static void Main()
{
var item = new Vegetable("eggplant");
var date = DateTime.Now;
var price = 1.99m;
var unit = Unit.item;
Console.WriteLine($"On {date}, the price of {item} was {price} per {unit}.");
}
}
```
# 5 构造函数
在类被实例化的时候调用(即创建类的对象实力的时候),也是类的成员。构造函数名字必须与类的名字一致;没有返回值;默认构造函数五参数,但也可以设定参数,但要一并把无参数的写法一起写进去。
如:
```
class Toy
{
public Toy(string name)
{
Console.WriteLine("正在创建{0}玩具." , name);
}
}
```
会提示错误,因为构造函数默认无参数,也就是括号里面不能有内容。但如果非要有内容,则改成以下:
```
class Toy()
{
public Toy() {} // 无参数的构造函数,这部分先写
public Toy(string name) //接下来写我们需要的带参数的构造函数,但一旦有参数以后,就必须有返回值
{
Console.WriteLine("正在创建{0}玩具.", name);
}
Toy thetoy = new Toy(" 小骑车"); // 返回值
}
```
下面实例
```
using System;
namespace MyApp
{
public class Test
{
//构造函数,名称必须与类的名称相同,所以接下来那句 public Test()必须写。
public Test()
{
System.Diagnostics.Debug.WriteLine("构造函数被调用");
}
//析构函数,用来销毁不需要的类实例,以~开头,没有返回值
~Test()
{
System.Diagnostics.Debug.WriteLine("析构函数被调用");
}
}
class Program //默认这部分必须写
{
static void Main(string[] args)
{
Test t = new Test();
}
}
}
```
# 注意语法中是否有 static。
如果有,则要用string arr 等类后面加点,调用方法,如果没有,则直接用对象名后面加点调用方法。
![](https://box.kancloud.cn/7be63120697e1c4a68b9e3e72ac218ab_816x382.png)
1.如果是用到类,则需要类名后面加点。比如:
```
string s1, s2;
console.writeline(string.compare(s1,s2)) //在 string 这个类后面加点再调用 compare;
```
2.如果是用方法,则直接用变量名后面加点,直接跟方法。比如:
```
string s1,s2;
s1 = "hello";
s2 = "HELLO"
comsole.writeline(s1.CcompareTo(s2)) //要用对象名后面加点;
```
- 帮助文档 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互相转化