C# 基础
简介
C#(读作“See Sharp”)是一种新式编程语言,不仅面向对象,还类型安全。 开发人员利用 C# 能够生成在 .NET 中运行的多种安全可靠的应用程序。
C# 源于 C 语言系列,C、C++、Java 和 JavaScript 程序员很快就可以上手使用。
下面列出了 C# 成为一种广泛应用的专业语言的原因:
- 现代的、通用的编程语言。
- 面向对象。
- 面向组件。
- 容易学习。
- 结构化语言。
- 它产生高效率的程序。
- 它可以在多种计算机平台上编译。
- .Net 框架的一部分。
环境搭建
.NET 环境
安装 .NET Core SDK 下载 .NET(Linux、macOS 和 Windows) 下载安装完成后, 进入任务管理器,win + R 打开运行窗体 输入 cmd
输入指令 : dotnet --info
输出如下环境信息则表示搭建成功.
|
|
如果输入后发现显示的是 dotnet不是内部或外部的命令,也不是可运行的程序或批处理文件
需要手动添加环境变量.
添加内容如下:
在“系统变量”部分选中 Path,并点击编辑
添加如下路径:
|
|
接着点击确定保存,
重新打开 CMD 窗口 输入 dotnet --info
Hello,World
打开 CMD 窗口 ,输入 dotnet new console -o testObj
创建一个名为 testObj
的控制台程序,如果创建成功,控制台会输出如下信息
|
|
然后找到项目路径下的 Program.cs
文件,使用 IDE 或者编辑器将文件内容改为下面的:
|
|
接着将控制台移动到你的项目目录下.输入 dotnet run Program.cs
如果输出 Hello World!
说明 C# 环境搭建成功.
C# 的 IDE
IDE 可以使用微软官方的 Visual Studio.
Visual Studio 2022 社区版 - 下载最新的免费版本
或者是 Visual Studio Code .
Visual Studio Code - Code Editing. Redefined
当然也可以使用 JetBrains 的 Rider
Rider:JetBrains 出品的跨平台 .NET IDE
因为我学生资格还在,所以用的是 Rider .
程序结构
一个 C# 程序主要包括以下部分:
- 命名空间声明(Namespace declaration)
- 一个 class
- Class 方法
- Class 属性
- 一个 Main 方法
- 语句(Statements)& 表达式(Expressions)
- 注释
C# 文件的后缀为 .cs
一个 HelloWorld 实例如下:
|
|
- 程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。
- 下一行是 namespace 声明。一个 namespace 里包含了一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。
- 下一行是 class 声明。类 HelloWorld 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,HelloWorld 类只有一个 Main 方法。
- 下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。
- 下一行 /…/ 将会被编译器忽略,且它会在程序中添加额外的 注释。
- Main 方法通过语句 Console.WriteLine(“Hello World”); 指定了它的行为。
- 最后一行 Console.ReadKey(); 是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。
WriteLine是一个定义在 _System 命名空间中的 Console 类的一个方法。该语句会在屏幕上显示消息 “Hello World”。
以下几点值得注意:
- C# 是大小写敏感。
- 所有的语句和表达式必须以分号(;)结尾。
- 程序的执行从 Main 方法开始。
- 与 Java 不同的是,文件名可以不同于类的名称。
编译运行
控制台移动到项目目录.输入 csc Program.cs
进行编译.
输出如下内容说明编译成功也说明你的 CSC 环境是没问题的:
|
|
如果碰到无法识别 CSC 命令,需要手动天际环境变量:
在 Path 字段下 添加 C:\Windows\Microsoft.NET\Framework\v2.0.50727\
编译完成后会在项目目录下发现生成一个 Program.exe 的可执行文件,
双击打开会输出 Hello,world!
基本语法
示例
|
|
执行结果:
|
|
using 的用法
以 using 关键字开头的一行代码(例如using System;
)可以称为一条 using 语句,几乎所有的 C# 程序都是以 using 语句开头的。using 语句主要用来引入程序中的命名空间,而且一个程序中可以包含多个 using 语句。
class 关键字
class 关键字用来声明一个类,后面是类的名字,class 关键字与类名之间使用一个空格分隔。
注释
注释用于对代码进行解释说明,在编译 C# 程序时编译器会忽略注释的内容。C# 中有单行注释和多行注释两种:
多行注释
多行注释以/*
开头,并以*/
结尾,/*
和*/
之间的所有内容都属于注释内容,如下所示:
|
|
单行注释
单行注释由//
符号开头,需要注意的是单行注释没有结束符,而且只对其所在的行有效,//
符号之后的所有内容都属于注释内容,如下所示:
|
|
成员变量
成员变量是用来存储类中要使用的数据或属性的。在上面的示例程序中,Rectangle 类中包含两个成员变量,分别是 length 和 width。
成员函数
成员函数(也可以称为成员方法)是执行特定任务的语句集,一个类的成员函数需要在类中声明。上面的示例代码中,Rectangle 类包含三个成员函数,分别是 AcceptDetails、GetArea 和 Display。
类的实例化
通过一个已有的类(class)创建出这个类的对象(object)的过程叫做类的实例化。类的实例化需要使用 new 关键字,例如上面示例中第 26 行就创建了一个 Rectangle 类的对象。
标识符
标识符是用来为类、变量、函数或任何其他自定义内容命名。C# 中标识符的定义规则如下所示:
- 标识符必须以英文字母
A-Z、a-z
开头,后面可以跟英文字母A-Z、a-z
、数字0-9
或下划线_
; - 标识符中的第一个字符不能是数字;
- 标识符中不能包含空格或特殊符号,例如
? - + ! @ # % ^ & * ( ) [ ] { } . ; : " ' / \
,但是可以使用下划线_
; - 标识符不能是 C# 关键字。
数据类型
在 C# 中,变量分为以下几种类型:
- 值类型(Value types)
- 引用类型(Reference types)
- 指针类型(Pointer types)
值类型 (Value types)
值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。
值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当声明一个 int 类型时,系统分配内存来存储值。
|
|
|
|
也可以使用 var
关键字来隐式声明变量,但是在 C# 中var
声明要注意以下几点:
-
必须在定义时初始化。也就是必须是 var s = “abcd”形式,而不能是如下形式: var s; s = “abcd”;
-
一但初始化完成,就不能再给变量赋与初始化值类型不同的值了。
-
var 要求是局部变量。
-
使用 var 定义变量和 object 不同,它在效率上和使用强类型方式定义变量完全一样。
引用类型(Reference types)
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。
对象(Object)类型
对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
|
|
动态(Dynamic)类型
您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
声明动态类型的语法:
``
|
|
|
|
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
字符串(String)类型
字符串(String)类型 允许您给变量分配任何字符串值。
字符串(String)类型是 System.String 类的别名。它是从对象(Object)类型派生的。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。
|
|
而@ 字符串和引号字符串不同的是: @ 字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内。 比如:
|
|
输出结果:
|
|
指针类型(Pointer types)
针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。
语法:
|
|
|
|
直接执行编译会报如下错误:
|
|
出现原因:
在写任意一个 C#程序的时候,一般都是在创建托管代码。托管代码是在 Common Language Runtime (CLR)控制下执行,CLR 使得程序员不需要管理内存和关心内存的分配和回收,有自动回收内存的机制。CLR 也允许你写非安全代码 (unsafe code)。
非安全代码就是不在 CLR 完全控制下执行的代码,它有可能会导致一些问题,因此他们必须用 “unsafe” 进行表明,所以一般如果在 C#中到用 unsafe code 非安全代码的话,VS.NET 中编译就会出现“Unsafe code may only appear if compiling with /unsafe”的提示
如果是 Rider 的话,双击报错,会发现使用过指针的代码旁边会显示一个红色的灯泡.
鼠标点击那个灯泡然后点击 Allow unsafe code in this project
就可以允许不安全代码了
变量
一个变量只不过是一个供程序操作的存储区的名字。
在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。
类型 | 示例 |
---|---|
整数类型 | sbyte、byte、short、ushort、int、uint、long、ulong 和 char |
浮点型 | float 和 double |
十进制类型 | decimal |
布尔类型 | true 或 false 值,指定的值 |
空类型 | 可为空值的数据类型 |
定义
C# 中变量定义:
|
|
data_type
: 数据类型
variable_list
: 变量数量
|
|
当然也可以在定义的时候进行初始化.
|
|
变量初始化
变量通过在等号后跟一个常量表达式进行初始化(赋值)。初始化的一般形式为:
|
|
|
|
|
|
输出:
|
|
接受来自用户的值
System 命名空间中的 Console 类提供了一个函数 ReadLine(),用于接收来自用户的输入,并把它存储到一个变量中。
|
|
函数 Convert.ToInt32() 把用户输入的数据转换为 int 数据类型,因为 Console.ReadLine() 只接受字符串格式的数据。