C#

C#

1.运行环境

1.1

.NET概述与c#应用: .NET是Microsoft .NET的简称,是基于Windows平台的一种技术。它包含了能在.NET Framework平台运行的所有编程语言。.NET Framework是微软为开发应用程序的一个富有革命性的新平台,在这个平台环境中,可以开发出运行在Windows 上的几乎所有应用程序。简单地说,.NET Framework 是一个创建,部署,运行应用程序的多语言多平台环境,它包含了一个庞大的代码库,各种能够运行在.NET Framework平台上的语言都可以共享这个代码库。

1.2

微软推出了强大的哦ing他和技术,并提供了强大的继承开发环境(IDE)来支持,这就是Visual Studio,它集成了.NET Framework,是目前最流行的.NET平台开发环境

2.C#程序的创建

1.2.1 新建程序

对.NET Framwork,C#和Visual Studio有了初步认识后,下面就让我们来了解一下C#程序的庐山真面目吧。启动Visual Studio2019,选择“开始”一>"所有程序"一>"Microsoft Visual Studio2019 "一>"Visual Studio2019"选项, 使用Visual Studio2019创建并运行控制台应用程序包括三步:新建项目一>生成可执行文件一>运行。现在我们就一千元创建第一个控制台应用程序,输出一句话“Hello World”;

1启动Visual Studio2019

在Visual Studio要配置环境,需要花费一定的时间。程序启动后,需要选择最经常从事的开发活动类型,以便于Visual Studio将环境配置为最方便使用的环境。这里我们经常要做的事C#开发,所有选择“Visual C#开发设置”

2.新建项目

  1. 在Visual Studio菜单栏中选择“文件”一>"新建"一>"项目"选项中弹出“新建项目”对话框。
  2. 在左侧的项目类型中选择“Visual C#”选项,在右侧的模板列表中选择“控制台应用程序”选项
  3. 在”名称“文本框中输入“HelloWrold”
  4. 为项目选择一个保存的位置,如D:\。单机“确定”按钮后,就创建了一个C#代码模板
  5. 在Main()方法中添加如下代码
Consoole.WriteLine("HelloWorld");
Console.ReadLine();

3.生成可执行文件

在Visual Studio菜单栏中选择“生成”一>“生成可执行文件”选项,如果错误列表中没有显示错误和警告,并且Visual Studio的状态栏中显示“生成成功”,就表示我们的代码没有编译错误,可以运行了!

4.开始运行

在Visual Studio菜单栏中选择“调试”一>“开始运行(不调试)”选项。

1.2.2 认识控制台应用程序文件夹的结构

成功运行了第一个C#程序后,让我门来看看C#应用程序是怎样组织的。前面建立项目的时候,Visual Studio已经在D:\下创建了一个与“HelloWrold”项目同名的文件夹,叫做解决方案文件夹。那么,什么是解决方案呢?解决方案和项目都是Visual Studio提供的有效管理应用程序的容器。一个解决方案可以包含一个或多个项目,而每个项目都能够解决一个独立的问题。在这门课程中,我们的工作都是在某个解决方案的唯一一个项目中完成的。

Visual Studio 提供了一个 窗口叫做解决方案资源管理器,在这里我们剋管理解决方案中包含的各类文件。在解决方案资源管理器中单机(显示所有文件)按钮,就可以看到项目的结构了。

我们需要认识下面的两个文件:

Program.cs:该文件是项目的启动文件,在该文件中定义项目的启动入口,即Main( )方法。在C#中,程序源文件以**.cs**作为扩展名。

HelloWorld.exe:这个文件位于bin\Debug目录下,是项目编译后生成的可执行文件,可以直接运行。

1.2.3 认识C#程序

1.namespace关键字

namespace(命名空间是C#中组织代码的方式,它的作用类似于Java中的Package(包),这样我们就把紧密相关的一些代码放在同一个命名空间中,大大提高管理和使用的效率。

2.using关键字

在Java中,如果导入其他包,应该使用import关键字。而在C#中,使用using关键字来应用其他命名空间,它的作用和Java中的import类似。

3.class关键字

与Java一样,C#也是一种面向对象的语言,使用class关键字表示类.我们编写的代码都应该包含在一个类里面,类要包含在一个命名空间中。在程序模板生成时,Visual Studio自动创建了一个类,名为Program。如果你不喜欢,可以改掉它。注意:C#与Java不同,不要求类名必须和源文件的名称一样。

4.Main()方法

C#中的Main()方法和Java中的main()方法作用是一样的,是程序运行的入口,应用程序从这里开始运行。但要注意的是C#中的Main()首字母必须要大些,Main()方法的返回值可以是void或者是int类型,Main()方法可以没有命令行参数。因此,这样组合一下,C#中的Main()方法有四种形式。

static void Main(string[] args){ }
static void Main(){ }
static int Main(string[] args){ }
static int Main(){ }

5.关键代码

Main( )方法中添加的两行代码就是这个小程序的关键代码,是用来输出和输入。

Console.WriteLine("Hello World");   //从控制台输出内容
Console.ReadLine();					//从控制台输入

C#中的数据类型

每一张开发语言都有它的数据类型,C#语言有哪些数据类型呢?跟Java中的数据类型有什么区别的联系吗?C#提供的数据类型与Java非常相似。

常用数据类型javaC#举 例
整型intint年龄
浮点型floatfloat成绩
双精度型doubledouble圆周率
字符串型Stringstring姓名
布尔型booleanbool是否是少数名族

在为浮点型变量赋值时,C#语言要求赋值数据必须以字母f或F结束。

C#中的变量

C#中的变量声明方式与Java是相同的,使用下面所有介绍的方式。

数据类型 变量名称;

C#的变量命名规则与Java也基本相同。只是“$”符号是不能使用的,因此变量的命名规则可以简单总结为以下三条。

  • 组成:52个英文字母(AZ,az),10个数字(0~9),下划线( _ ),除此之外不能含有其他的字符。
  • 开头:只能以字母或下划线开头。
  • 不能使用的:不能是C#中的关键字。

变量命名规范如下:

  • 变量的名称要有意义,尽量用对应的英文命名,具有见名知意的作用。例如,一个变量代表姓名,不要使用aa,bb等,要使用name.
  • 避免使用单个字符作为变量名时,如a,b,c等,应该使用index,temp等,但循环变量除外。
  • 当使用多个单词组成变量名时,应该使用骆驼命名法,即第一个单词的首字母小写,其他单词的首字母大写,如myName,yourAge等。

C#中的常量

什么是常量

常量就是在程序运行过程中保持不变的值,比如一周的天数,应该是比可以变得,就可以定义为常量。常量定义的语法如下。

const 数据类型 常量名称 = 值;

常量命名规范如下。

  • 常量名称必须具有一定的实际意义。
  • 常量名称最好以大写字母来命名,中间可根据意义的连接性用下划线做连接,每个常量定义的右侧最好有简单的注释,说明其作业。
  • 常量名称长度最好不要超过25个字符,否则可读性差。

何时使用常量

  • 常量在程序中一旦设定就不允许被修改的值。例如,圆周率的值在整个程序范围内一般是不能随意修改的。
  • 用于在程序中被经常应用的值。例如,某个错误消息在程序中可能多出被引用,就可以把它定义成常量.
  • 用于程序中具有特点含义的值。例如,在程序中,使用1表示登录状态,0表示未登录状态,此时就可以定义两个有实际意义的常量分别表示登录和未登录两个状态

C#向控制台输出

利用Console.WriteLine()方法输出有三种方式。

方法1:

Console.WriteLine();

方法2:

Console.WriteLine(要输出的值);

方法3:

Console.WriteLine(“格式字符串”,变量列表);

类和对象

自定义方法除了使用.NET提供的类的方法,也可以在类中添加自定义的方法。还记得在Java中是怎样定义方法的吗?在C#中定义方法的语法与Java语法类似。

[访问修饰符] 返回值类型 方法名(参数列表)
{
		//方法的主体
}

1.访问修饰符

在java课程中已经学习了访问修饰符public在本课程中将会使用两个访问修饰符的具体应用将在第三章中详细讲解。

2.方法的返回值类型

我们编写的方法是实现特定功能的模块,可供他人调用后可以返回一个值,这个返回值的数据类型就是方法的返回值类型,可以是int,float,double,bool,string等。如果方法不反悔任何值,需要使用void关键字

3.方法的主体

方法的主体部分就是这个方法实现某一个特定功能的代码。自定义方法时,应该先写方法的声明,包括访问修饰符,返回值类型,方法名,参数列表,然后写方法主体。

C#的结构

IF选择结构

IF选择结构语法

public class Demo{
    public static void main(String[]args)
    {
        //语句1;
        //语句2;
        if(条件)
        {//只能放boolean值满足就输出大括号的
            //语句3;
        }
        else
        {//不满足则执行大括号里面的
            //语句4;
        }        
    }
}

上面这个是模板,大家应该有点不懂吧,下面我给大家看下

IF选择结构流程图:

在这里插入图片描述

多重if选择结构

但不过有些问题,我们可以确定使用单个IF选择结构无法完成。那么可以使用多个if选择结构来实现。但是条件写起来也很麻烦。Java中还有一种if选择结构的形式:多重if选择结构。多重if选择结构在解决需要判断的条件是连续的区间时有很大的优势。多重if选择结构不是多个基本if选择结构简单的排列在一起,

多重if选择结构语法具体如下:

if(条件1)
{
    //条件1成立时语句
}
else if(条件2)
{
    //条件2成立时语句
}
else if(条件3)
{
    //条件3成立时语句
}
else
{
    //条件1,2,3都不成立时语句
}
  • 多重if结构 主要解决有多种可能结果的问题永远只执行其中一个分支
  • 其中,else if块可以有多个,需要几个else if块完全取决与需要。
  • else块最多有一个或没有,else块必须要放在else if快之后。

还有一些符号能让你更好的使用if选择结构进行判断:

运 算 符汉 语 名 称表 达 式说 明
&&与,并且条件1&&条件2两个条件同时为真,则结果为真
||或,或者条件1||条件2两个条件一个为真,则结果为真
!条件为真时结果为假,条件假则为真

多重if选择结构示例

public class ScoreAssess{
	public static void main(){
		int score = 70;				//考试成绩
        if(score >= 80)
        {			//考试成绩>=80
            Console.WriteLine("良好");
        }
        else if(score >= 60)
        {		//80>考试成绩>=60
            Console.WriteLine("中等");
        }
        else
        {						//考试成绩<60
            Console.WriteLine("差");
        }
	}
}

看上面代码考试成绩70分不满足条件1所以不执行第一个代码快,则继续往下面判断:可以看出它满足条件2则执行条件2后面大括号里面的代码块所以输出中等;然后跳出这个多重if选择结构。

流程图:

在这里插入图片描述

嵌套if选择结构:

嵌套if选择结构流程图:

在这里插入图片描述

嵌套if选择结构注意事项:

  • 只有当满足外层if选择结构的条件时,才会判断内层if的条件。
  • else总是与他前面最近的那个缺少else的if配置。

if结构书写规范如下:

  • 为了使if结构更加清晰,应该吧每个if或else包含的代码块用大括号括起来。
  • 相匹配的一对if和else应该左对齐。
  • 内层的if结构相对于外层的if结构要有一定的缩进。

switch选择结构

虽然解决了这个问题,可是看上去很烦琐。这个问题跟前面的问题比起来有什么不同?显然这个问题是等值的判断,之前的问题是区间判断。对此Java提供了另一种结构,可以方便的解决等职判断问题,这就是switch选择结构.

什么是switch选择结构:switch选择结构可以更好的解决等值判断问题

switch选择结构语法:

switch(表达式){
	case 常量1//代码块1;
        break;
    case 常量2//代码块2;
        break;
    case 常量3//代码块3;
        break;
        .......
    default:
        //代码块n;
        break;
}

这里switch,case,default,break都是Java的关键字。

switch选择结构用到了四个关键字,下面将一一介绍。

  • switch:表示“开关”,这个开关就是switch关键字后面小括号里表达式的值,jdk1.7后switch语句小括号里可以是int,short,byte,char,枚举类型,String类型表达式。
  • case:“情况,情形”,case后可以是是int,short,byte,char,枚举类型,String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
  • default:表示“默认”,及其他情况都不满足。但是default后面要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
  • break:表示“停止”,及跳出当前结构。

如何使用switch选择结构

与上面那个多重if比起来用switch看起来更清晰一些,他们完成的功能其实是完全一样的。但是,并非所有的多重if选择结构都可以用switch选择结构代替。通过观察,可以看出,switch选择结构的条件只能是等值的判断,而且只能是整型或字符型的等值判断。也就是说,switch选择结构只能用于一个字符的情况,并且每一个case后面的常量值都不同。而多重if选择结构既可以用于判断条件是等值的情况,也可以用于判断条件是区间的情况。

注意

  • break语句可以是省略的,但是省略后会带来一些问题。省略break的后果的如下:当某个case后的常量值与switch后的小括号中的值相匹配时,执行该case块的代码,后面的case就不再进行条件判断,而直接执行后面所有case块中的代码,值到遇到break结束。所以在编写switch选择结构时不要忘记在每个case块后加上一个break;用来跳出switch选择结构。
  • 每个case后的代码块可以有多个语句,既可以有一组语句,而且不需要用“{}”括号起来。case和default后都有一个冒号,不能漏写,否则编译不通过。对于每个case的结尾,都要想一想是否需要从这里跳出整个switch选择结构。如果需要,一定不要忘记写“break”。
  • 在case后面的代码块中,break语句可以省略的,还可以让多个case执行同一语句。

循环结构

while循环

当程序需要重复执行一段代码时,使用循环结构。循环结构的特点是在给定的条件成立时,反复执行一段代码,直到条件不成立。
C#中有三种循环结构:

  • while循环
  • do-while循环
  • for循环

while循环语法:

while循环先判断循环条件,条件为true,则执行循环体,条件为false,则一次也不执行循环体
注意:循环条件为true,如果没有在{}里面改变循环条件的话,会出现死循环。

使用while循环结构解决问题的步骤如下:

  • 分析循环条件和循环操作。

  • 套用while语法写出代码。

  • 检查循环能否退出。

    注意

    使用while循环结构解决问题时,一定要注意检查循环能否退出,及避免出现"死循环"现象。

//变量初始化
while(循环条件){
    //循环体;
    //迭代;
}

while循环结构执行顺序一般如下:

  1. 声明并初始化循环变量。
  2. 判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
  3. 执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环

实际上,while循环结构如果第一次判断循环条件就不满足,则会直接跳出循环,循环操作一遍都不会执行。这时while循环结构的一个特点:先判断后执行。

do-while循环

do-while循环语法:

do-while循环先执行一次循环体,再判断循环条件,条件为true,则继续执行循环体,直到条件为false退出循环
注意:循环条件为true,如果没有在{}里面改变循环条件的话,会出现死循环。

上面这个代码时算出1至100的和。下面我们来说说do—while循环的执行顺序一般如下:

  1. 声明并初始化循环变量。
  2. 执行一遍循环操作。
  3. 判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
  • do—while循环的特点是:先执行,再判断。
  • 根据do—while循环的执行过程可以看出,循环操作至少执行一遍。

do—while循环流程图:

在这里插入图片描述

for循环:

for循环语法

什么是for循环结构

循环语句的主要作用是反复执行一段代码,直到满足一定的条件位置。总结一下,可以吧循环结构分为四个部分。

初始部分:设置循环的初始状态,如设置记录循环次数的变量i为1;

循环体:重复执行的代码,即输出"好好学习天天向上!"

迭代部分:下一次循环开始前要执行的部分,在while循环结构中它作为循环体的一部分,如使用"i++";进行循环次数的累加。

循环条件:判断是否继续循环的条件,如使用"i<=100"判断循环次数是否已经达到100。

在for循环结构中,这几个部分同样必不可少,不然循环就会出行错误。for循环的一般格式如下

for(表达式1;表达式2;表达式3)
{
			 //循环体            
		}
表达式形式功能举例
表达式1赋值语句循环结构的初始部分,微循环变量初始值int i=1
表达式2条件语句循环结构的循环条件i<=100
表达式3赋值语句循环结构的迭代部分,通常用来修改循环变量的值i++

for循环流程图

在这里插入图片描述

c#支持3种类型的跳转语句:

  • break语句

  • continue语句

  • return语句

    break语句

    break语句只出现在循环或是switch中,break语句在循环中的作用是跳出循环,在switch中的语句是跳出switch。
    示例:

    public class Demo {
        public static void main(String[] args) {
            for (int i = 1; i < 10; i++) {
                if(i == 4){
                    break;  //i==4为true时跳出循环
                }
               Console.WriteLine(i);//输出123
            }
        }
    }
    
    

    continue语句

    continue语句只出现在循环中,作用是强制循环返回,就是让循环结束本次循环直接进入下一次循环。
    示例:

    public class Demo {
        public static void main(String[] args) {
            for (int i = 1; i < 10; i++) {
                if(i == 4){
                    continue;   //i==4为true时结束本次循环直接进入下一次循环
                }
                System.out.print(i);  //输出12356789
            }
        }
    }
    
    

    return语句

    直接退出整个方法,同时也是方法返回值关键字;

数组

C#中,数组就是一个常量,用于将相同数据类型的数据存储在内存中。数组中的每一个数据元素都属于同一个数据类型。例如全班30个学员的成绩都是整型,就可以存储在一个整型数组里面。

下面来看数组的基本要素。

  • 标识符。首先,和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组。

  • 数据元素。当给出了数组名称,即数组标识符后,要向数组中存放数据,这些数据就称为数组元素。

  • 数组下标。在数组中,为了正确的得到数组元素,需要对它们进行编号,这样计算机才能根据编号去存取,这个编号就称为数组下标。

  • 元素类型。存储在数组中的数组元素应该是同一数据类型,如可以把学员的成绩存储在数组中,而每一个学员的成绩可以用整型变量存储,因此称它的元素类型是整型。

数组名 = new数据类型[数组长度];

两部合并,即在声明数组的同时就给它分配空间,语法如下。

数据类型[] 数组名 = new 数据类型[数组长度]

  • 赋值

分配空间后就可以向数组里放数据了。数组中的每一个元素都是通过下标来访问的,语法如下

数组名[下标值];

例如,向scores数组中存放数据。

scores[0] = 89;

scores[1] = 60;

scores[2] = 70;

会发现数组的下标是规律变化的,即从0开始顺序递增,所以考虑用循环变量表示数组下标,从而利用循环给数组赋值。

Scanner input = new Scanner(System.in);
for(int i = 0;i < 30; i++){
	score[i] = input.nextInt();		//从控制台接受键盘输入进行循环赋值
}

在编写程序时,数组和循环往往结合在一起使用,可以大大简化代码,提高程序效率。通常,使用for循环遍历数组或者给数组元素赋值。

语法

数据类型[] 数组名={值1,值2,值3,…值n};

数组常见错误

  1. 数组下标从1开始
  2. 数组访问越界

注意:数组下标从0开始,而不是从1开始。如果访问数组元素时指定的下标小于0,或者大于等于数组的长度,都将出现数组下标越界异常。

访问修饰符

​ public :公开
​ 只要你知道有这个对象,你就可以使用public成员
​ protected:受保护的
​ 1、有这个对象;2、类授予你访问的权限
​ private:私有
​ 1、当前类以外的都不能访问
​ internal:默认的

将属性都私有化,提供公有的get/set方法来进行访问
set:给属性赋值,只写属性
get:获取属性的值,只读属性

C#中类的成员

​ 字段:私有化
​ 方法
​ 属性:get/set

调试:

逐语句(F10):如果调用了其他方法,会进入方法体内部
逐过程(F11):如果调用了其他方法,不会进入方法,会在当前方法一次性执行完毕

this:表示当前类的对象引用

如果在方法中要调用当前类里面的成员的时候
注意:this不能在静态成员中使用

参数的传递

值传递
基本数据类型:
形参所做修改不会影响实参
引用数据类型:
形参对具体值的修改会影响实参
(如果形参修改了指向的地址,那么接下来形参做的任何一项改变都不会影响实参)
引用传递(地址传递):
基本数据:形参所做修改会影响实参
引用数据:

在实参和形参前面多了一个关键字:ref
在参数传递过程中,不管是基本/引用数据类型
传递都是地址

定义:

​ 访问修饰符 返回值 方法名(数据类型 变量名){} //变量:形参
​ 方法名(实参);//调用方法

string的方法使用

1、对象初始化器:

User user = new User(){属性=值,属性=值…};

2、String,class

属性:
Length:获取字符串的长度
方法
static Concat()
Equals():比较值(堆)
static Equals(String ,String)
Equals(String )
==:比较值(堆)
staitc Format():格式化代码
{数字}:占位符,从0开始
static IsNullOrEmpty(String)
既可以判断空对象的字符串,
又可以判断长度为0的字符串
static String.Join(连接符号, 要被连接的数字);
Split(char):以指定字符串拆分
IndexOf(string)从前往后找
LastIndexOf(string)从后往前找
Remove(开始下标);从开始下标到length-1的内容都被删除
Remove(开始下标,长度);
Replace(String old, String newStr):替换
Substring(int 开始位置):截取
Substring(int 开始位置, int 截取的长度):截取
ToLower()转换为小写
toUpper()转换为大写
Trim()去掉前后空格
TrimStart()去掉前面的空格
TrimEnd()去掉后面的空格

3、在C#中,String有一个别名:string

String:类名
string:关键字,

4、构造函数:

语法:访问修饰符 类名(参数){}
作用:new对象

三、总结

1、String是:class

​ 别名:string(关键字)

2、怎么创建String对象

​ String str = “”;
​ String str = new String(char[]);
​ XString str = new String();
​ XString str = new String("");

3、String:
1、属性:

​ Length:长度

2、方法:

​ static Concat():连接
​ Equals():比较值是否相等
​ ==:比较值是否相等
​ static Format()格式化字符串
​ 占位符
​ static IsNullOrEmpty()判断是否是空对象或长度为0字符串
​ static Join():以指定的字符串连接数组
​ Contains():是否包含指定字符串
​ bool str.Contains(“12”)
​ 如果包含返回true,否则返回false
​ IndexOf()
​ LastIndexOf()
​ Remove()删除
​ Replace()替换
​ Split(char)分割
​ Substring()截取
​ Substring(start)
​ Substring(start,length)
​ ToLower()
​ ToUpper()
​ Trim()

4、类型转换:

隐式:自动转换
int b = 1;
long a = b;
显示:强转
数据类型.Parse(String)
Convert.To数据类型(任意数据类型)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值