一:第一个C#程序
1.创建C#程序步骤
新建项目——>形成可执行文件——>开始运行
-
C#的语法基础
解决方案:一个解决方案中可以有多个项目
项目:装C#文件
C#文件:.cs
C#的可执行文件:.sln
-
C#的注释
a.单行:
//
b.多行
块注释:/* */
文档注释:///
c.折叠
#region #Endregion
-
命名规则
1.类名:采用驼峰命名法
2.变量名
a. 以"_"或字母开头
b.组成:以英文字母,数字,下划线,除此之位不能有其他的字符
c.不能是C#的关键字
-
类型转换
a. 数据类型.Parse(String类型的变量)
b. Convert .To数据类型(任意数据类型)
c. 任意数据类型:Object
6. C#与Java的不同
C# | java | |
包 | namespace | package |
类名字与源文件 | 自动生成一个Program类,且类名与源文件可以不相同 | 类名与源文件必须相同 |
导入包 | using | import |
Main()方法 | Main(第一个字母大写,且它有四种main方法形式) | main(第一个字母小写,且它有只有一种main方法形式) |
布尔类型 | bool | boolean |
字符串的关键字 | string(第一个字母小写) | String(第一个字母大写) |
声明常量 | const 数据类型 数据名=值; | (final)数据类型 数据名=值; |
控制台的输入 | Console.ReadLine();【换行】 Console.Read();【不换行】 | 用Scanner input=new Scanner(System.in);【如:输入一个int类型的数】 int num=input.nextInt(); |
控制台的输出 | Console.WriteLine("输出的内容");【换行】 Console.Write("输出的内容");【不换行】 | System.out.println(“输出的内容”);【换行】 System.out.print(“输出的内容”);【不换行】 |
二:C#的语法(与Java大致相同)
```c#
//if if-else
if(条件) if(条件)
{ {
//代码块1 //代码块 1
} }
else
{
//代码块 2
}
----------------------------------------------------------------------------------------
//多重if 嵌套if
if(条件1) if(条件1)
{ {
//代码块 1 if(条件2)
} {
else if(条件2) //代码块1
{ }
//代码块2 else
} {
else //代码块2
{ }
//代码块3 else
} {
//代码块3
}
2.switch结构
switch(表达式) (小括号中可以是int、 short 、byte 、 char 、
{ 枚举类型 、String类型表达式)
case 常量1:
//代码块;
break;
case 常量2: (常量的值必须各不相同)
//代码块;
break; (break必须有,但若是两个case之间没有可执行的代码,
defaul: 那么前一个case可以省略break)
//代码块;
break;
}
3.循环结构
while(条件) do
{ {
//循环体 //循环体
} }while(条件);
for(初始化部分;条件;迭代) foreach(元素类型 变量名 in 数组)
{ {
//循环体 //循环体
} }
4. 在循环中遇到break与continue的区别
break:跳出本层循环,执行循环下面的语句
continue:跳出本次循环,进入下一次循环
5. C#数组
a.声明:数据类型[] 数组名;(只能把[]放在数组名前面)
b.长度:数组名.length
c.访问数组元素:下标(C#中叫索引)从0开始
d.初始化:
数据类型[] 数组名=new 数据类型[长度]; |
---|
数据类型[] 数组名=new 数据类型[]{值1, 值2, …}; |
数据类型[] 数组名=new 数据类型[长度]{值1, 值2, …};【长度与值数量相同,且这个是与Java不同的,C#特有的】 |
数据类型[] 数组名={值1, 值2, …}; |
6.冒泡排序法(需用二重循环)
运用:(升序)
using System;
namespace ConsoleApp10
{
class Program
{
static void Main(string[] args)
{
int[] scores = new int[5]; //定义五位学员的数组
int i, j;
int temp; //声明一个空变量
Console.WriteLine("请输入5个学员的成绩:");
for (i = 0; i < scores.Length; i++)
{
Console.WriteLine("请输入第{0}个学员的成绩:", i + 1);
scores[i] = int.Parse(Console.ReadLine());
} //循环接收成绩
for (i = 0; i < scores.Length - 1; i++)
{ //外层循环控制比较次数
for (j = 0; j < scores.Length - 1 - i; j++)
{ //内层循环控制将最大数放在最后
if (scores[j] > scores[j + 1])
{ //如果当前项比前一项大,那么交换元素
temp = scores[j];
scores[j] = scores[j + 1];
scores[j + 1] = temp;
}
}
}
Console.WriteLine("排序后的成绩为:");
for (i = 0; i < scores.Length; i++)
{ //升序后的输出
Console.Write("{0}\t", scores[i]);
}
Console.ReadLine();
}
}
}
【注意:外层循环:数组的长度-1 ,内层循环:数组的长度-1-i】
三:C#属性
1.访问修饰符
public:公开的 |
---|
private:私有的 |
protected:受保护的 |
internal:默认的 |
2. this关键字
a. this是什么?
this指当前对象本身,可以通过this引用当前类的成员变量合方法。
b. this有什么用?
可以解决成员变量和局部变量名冲突的问题
c.运用(this关键字):
class Student
{
private string 【_name】;
public void SetName(string 【_name】)
{ //方法中的【局部变量名与类成员变量名】相冲突
this._name = _name; //可以用this区分局部变量名与类成员变量名
}
public void Show()
{
Console.WriteLine("大家好!我叫{0}。", this._name);
}
}
3.封装
A.成员:字段(private),属性(public),方法
a.字段
字段通常是私有的,若需访问,则可以通过set和get访问器
语法:
private string _name; //字段以private修饰,且变量名以"_"开头
public string Name{ //数据类型要跟字段的数据类型相同,
//且属性名与变量名相同,除去"_",第一个字母大写即可
get{return _name;} //返回值
set{_name=value;} //赋值
}
b.属性
1.结合了字段和方法得到实现方式称之为属性
2.属性的访问类型:
只读属性:只包含get访问器
只写属性:只包含set访问器
读写属性:包含get和set访问器
3.属性跟方法的区别
C#中的属性访问器后不使用(),因为访问器没有返回值,所有也不需要指定void。
c.方法运用
using System;
namespace ConsoleApp4
{
class Student
{
private int _age;
public int Age //int类型的属性
{
get
{
return _age; //返回值
}
set
{
_age=value; //赋值
}
}
}
class Program
{
static void Main(string[] args)
{
Student stu = new Student();
stu.Age=40; //运用属性中的set访问器,赋值
Console.WriteLine(stu.Age); //运用属性中的get访问器,输出返回值
}
}
}
4.值传递与引用传递
1.值传递(有两种)
a.基础:方法中的形参不会改变实参
b.引用(如:数组):方法中的形参能改变实参
2.引用传递:
(关键字:ref)方法中的形参能改变实参
四:C#的String类
a. 查找下标
InderOf(“查找的字符”) 从字符串中第一个找到字符的下标 |
---|
LastInderOf(“查找的字符”) 从字符串中最后一个找到字符的下标 |
b.截取字符串
Java : Substring (开始下标,截取字符串的终止下标) |
---|
C# :Substring (下标,截取字符串的长度) |
c.字符串的大写与小写
string ToUpper():大写 |
---|
string ToLower():小写 |
d. 分隔:Split(‘分隔符’)
e. 连接:Join(“连接符”,字符串)
f:去掉空格:Trim()
2. Format格式
a.语法
String myString=String.Format(“格式字符串”,参数列表);
【格式字符串又包括固定文本和格式项,格式项的形式:{索引[,对齐][:格式字符串]}】
b.格式化数值结果表
字符 | 说明 | 实例 | 输出 |
---|---|---|---|
C | 货币格式 | String .Format("{0:C2}",2000) | ¥2000.00 |
D | 十进制格式 | String .Format("{0:D2}",2000) | 2000 |
F | 小数点后面的位数 | String .Format("{0:F2}",2000) | 2000.00 |
N | 用逗号隔开的数字 | String .Format("{0:N}",2000) | 2,000 |
P | 百分比计数法 | String .Format("{0:P2}",0.5545) | 55.45 |
X | 十六进制格式 | String .Format("{0:X000}",12) | C |
3.简单的类型转换
1.隐性:范围大的类型转换为范围小的
2.显性:范围小的类型转换为范围大的
a.强转(丢失了精确度)
如:int num=(int)86.9; num=86;
b. string类型的转换(保留精确度)
如(将string转换为double):double num =double .Parse(86.9); num =87;
c. Convert类转换(任何类型之间的相互转换)
方法 | 说明 |
---|---|
Convert .ToInt32() | 转换为int型 |
Convert .ToSingle() | 转换为单精度浮点型(float) |
Convert .ToDouble() | 转换为双精度浮点型(double) |
Convert .ToString() | 转换为string型 |