1.C#简介
1.1定义
C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。
C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。
C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。
1.2优点
现代、通用的编程语言;面向对象;面向组件;容易学习;结构化语言;产生高效率的程序;可以在多种计算机平台上编译;.Net框架的一部分。
1.3功能
布尔条件、垃圾自动回收、标准库、组件版本、属性、委托、易于使用的泛型、索引器、条件编译、简单的多线程、LINQ和Lambda表达式、集成Windows。
1.4.Net
.Net框架应用程序是多个平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL等等。
1.5解决方案、项目及类之间的关系
解决方案:公司
项目:部门
类:员工
在视图里边找解决方案资源管理器
2.C#程序结构
命名空间声明(namespace)
一个class
class方法
class属性
一个Main方法
语句&表达式
注释
using System;
namespace HelloWorldApplication
{
class HelloWorld
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
Console.ReadKey();
}
}
}
3.数据类型
// 隐式数据转换举例:int 转换为 long
int a = 11;
long b = a;
// 显示数据转换:long 转换为 int
int a1 = 123;
long b1 = a;
int c = (int)b1;
static void Main(string[] args)
{
int n1 = 10;
int n2 = 3;
double d = n1*1.0 / n2;
Console.WriteLine(d);
Console.ReadKey();
}//自动类型转换=隐式类型转换 强制类型转换=显式类型转换
将两个字符串连接使用“+”
加号的作用:
1.连接:两边有一边是字符串的时候,+号就起到了连接的作用
2.相加:两边是数字的时候
namespace -07_号的使用
{
class Program
{
static void Main(string[] args)
{
string name="李四";
Console.WriteLine("你好",+name);
Console.ReadKey();
}
}
}
Console.ReadLine();用于接收用户的输入
Console.WriteLine();向控制台打印内容输出内容
Console.ReadKey();暂停,等待用户按下任意键继续
Console.WriteLine("你喜欢吃什么水果呀?");
string fruit = Console.ReadLine();
Console.WriteLine("这么巧啊,我也喜欢吃{0}",fruit);
Console.ReadKey();
int seconds = 107653;
int days = seconds / 86400;//求天数
int secs = seconds / 86400;//求得求完天数后剩余的秒数
int hours = secs / 3600;//求得小时数
secs = secs % 3600;//求得小时数后剩余的秒数
int mins = secs / 60;//求得分钟数
secs = secs % 60;
Console.WriteLine("{0}秒是{1}天{2}小时{3}分钟{4}秒",seconds, days, hours,mins,secs)
Console.ReadKey();
double chinese = Convert.ToDouble(strChinese);
double math = Convert.ToDouble(strMath);
double english = Convert.ToDouble(strEnglish);
double sumSorce = chinese + math +english;
double avg = (int)sumScore*1.0 / 3;
Console.WriteLine("{0}你的总成绩是{1}平均成绩是{2:0.00}”,name,sumSorce,avg};
Console.ReadKey();
平均成绩保留两位小数
4.结构
4.1.if结构
2.if else-if结构
4.3.try-catch
try
{
可能出现异常的代码;
}
catch
{
出现异常后要执行的代码;
}
4.4.switch-case
用来处理多条件的定值的判断。
语法:
switch(变量或者表达式的值)
{
case值1:要执行的代码;
break;
case值2:要执行的代码;
break;
.......
default:要执行的代码;
break;
}
执行过程:程序执行到switch初,首先将括号中的变量或者表达式的值计算出来,然后拿着这个值依次跟每个case后边带的值进行匹配,一旦匹配成功,则执行该case所带的代码,执行完后层厚,遇到break,跳出结构。如果跟每一个case都不匹配,就看当前这个结构中是否存在default,如果有,则执行default中的语句,若没有,则该switch-case结构什么都不会做。
循环结构
4.5.while循环:
while(循环条件):
{
循环体;
} 特点:先判断,再执行,有可能一遍循环都不执行。
4.6.do_while循环
do
{
循环体;
}while(循环条件);
特点:先循环,再判断,最少执行一遍循环体。
4.7.for循环
已知循环次数
枚举
语法:
[public] enum 枚举名
{
值1,
值2,
值3,
......
}
public:访问修饰符。公开的公共的,哪都可以访问。
4.8.enum:关键字,声明枚举的关键字
枚举名:要符合pascal命名规范
将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。
枚举就是一个变量类型,int--double,string decimal。
只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。
我们可以将一个枚举类型的变量跟int类型和string类型相互转换。
枚举类型默认是跟nt类型相互兼容的,所以可以通过强制类型转换的语法相互转换。
当转换一个枚举中没有的值得时候,不会抛异常,而是直接将数字显示出来。
枚举同样也可以跟string类型相互转换,如果将枚举类型转换成string类型,则直接调用ToString()。
如果将字符串转换成枚举类型则需要下面这样一行代码:
(要转换得枚举类型)Enum.Parse(typeof(要转换的枚举类型),“要转换的字符串”);
如果要转换的字符串是数字,则就算枚举中没有,也不会抛异常。
如果转换的字符串是文本,如果枚举中没有,则会抛异常。
4.9.所有的类型都能够转换成string类型,调用ToString()
4.10.结构
可以帮助我们一次性声明多个不同类型的变量。
语法:
[public] struct 结构名
{
成员;//变量。
}
变量在程序运行期间只能存储一个值,而字段可以存储多个值。
4.11.数组
一次性存储多个相同类型的变量。
语法:
数组类型【】 数组名称= new 数组类型【数组长度】;
int[] nums = new int[10];
***数组的长度一旦固定了,就不能再被改变了
4.12.冒泡排序
冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。
int[] nums = {9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9
第一趟比较:8765432109交换了9次i=0 j=9numbers.Length-1-i
第二趟比较:7654321089交换了8次i=1 j=8numbers.Length-1-i
第三趟比较:6543210789交换了7次i=2 j=7numbers.Length-1-i
......
第八趟比较:1023456789交换了2次
第九趟比较:0123456789交换了1次
for(int i = 0; i<number.Length-1; i++)
{
for(int j = 0; j<numbers.Length-1-i;j++)
{
if(nums[j]>nums[j+1])
{
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1} = temp;
}
}
}
4.13方法
函数就是将一堆代码进行重用的一种机制。
函数的语法:
[public] static 返回值类型 方法名([参数列表])
{
方法体;
}
public:访问修饰符,公开的,公共的,哪都可以访问。
static:静态的
返回值类型:如果不需要写返回值,写void
方法名:Pascal每个单词的首字母都大写。其余字母小写
参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。
方法写好后,如果想要被执行,必须要在Main()函数中调用。
方法的调用语法:
类名.方法名([参数]);
***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,在这个时候,类名可以省略。
4.14return
1.在方法中返回要返回的值。
2.立即结束本次方法。
我们在Main()函数中,调用Test()函数,我们管Main()函数叫做调用者,管Test()函数叫做被调用者。
如果被调用者想要得到调用者的值:
1):传递参数
2):使用静态字段来模拟全局变量。
如果调用者想要得到被调用者的值:
1、返回值
2、不管是实参还是形参,都是在内存中国开辟了空间的。
3、方法的功能一定要单一。
GetMax(int n1,int n2)
方法中最忌讳的就是出现提示用户输入的字眼。
4、out、ref、para
1)、out参数。
如果你在一个方法中,返回多个相同类型的值的 时候,可以考虑返回一个数组。
但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,我们可以考虑使用out参数。
out参数就侧重于在一个方法中可以返回多个不同类型的值。
2)、ref参数
能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。
ref参数要求在方法外必须为其赋值,而方法内可以不赋值。
3)、params可变参数
将实参列表中跟可变参数数组类型一致的元素都当作数组的元素去处理。
params可变参数必须是形参列表中的最后一个元素。
5、方法的重载
概念:方法的重载指就是方法的名称相同,但是参数不同
参数不同,分为两种情况
1)、如果参数的个数
5.程序调试
调试方法:
1.F11逐语句调试 (单步调试)
2.F10逐过程调试
3.断点调试