C#基础

2021/10/5 17:12:44

本文主要是介绍C#基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C#语言特点

  • C#是微软发布发一种面向对象的、运行于.NET Framework和.NET Core(开源,跨平台)之上的高级语言。
  • C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象语言,它在继承C和C++强大功能的同时去掉了一些它们复杂的特性。

C#与.NET的关系

.NET是一个开发平台,而C#是一种在.NET开发平台上使用最多的编程语言。

.NET Framework

.NET Framework 是一个可以快速开发、部署网站服务及应用程序的开发平台,是 Windows 中的一个组件,主要包括公共语言运行库 CLR(Common Language Runtime)和 .NET Framework 类库FCL(Framework Class Library)。

  • 在 .NET Framework 框架中支持的编程语言包括 C#、VB、C++、J# 等, 但目前使用最多的是 C# 语言。

  • CLS(Common Language Specification, 公共语言运行规范)定义了一组规则,即可以通过不同的编程语言(C#、VB、J# 等)来创建 Windows 应用程序、ASP.NET 网站程序以及在 .NET Framework 中所有支持的程序。

  • CLR 是 .NET Framework 的基础。用户可以将 CLR 看作一个在执行时管理代码的代码,它提供内存管理、线程管理和远程处理等核心服务,并且还强制实施严格类型安全以及可提高安全性和可靠性的管理。

    它与 JVM类似。以公共语言运行库为目标的代码称为托管代码,不以公共语言运行库为目标的代码称为非托管代码。

  • FCL 中包括 Windows Forms (Windows 窗体程序)、ASP.NET(网站程序)、WPF(Windows 的界面程序的框架)、 WCF(Windows 平台上的工作流程序)等程序所用到的类库文件。

  • C# 6.0 版本已经能在多个操作系统上使用,例如在 Mac、Linux 等。此外,还能将其应用到手机、PDA 等设备上。

.Net Core

.NET Core是一个开源的,跨平台的Framework,不管是开发web或移动设备都在同一个Framework(.NET Core)下运行,而且 .NET Core也可在不同的操作系统上运行,包括Windows、Linux、MacOS,实现了跨平台跨设备。
.NET Core 在发布程序时不用事先安装Framework而是通过Nuget下载,这样在初次部署时就不用安装一个复杂而庞大Framework,而是按需下载。这种基于Nuget的按需加载铸就了.NET Core 跨平台。

NuGet 是免费、开源的包管理开发工具,专注于在 .NET 应用开发过程中,简单地合并第三方的组件库。

C#数据类型

C#数据类型分为:值类型、引用类型、指针类型。

值类型(Value types)

类型 描述 范围 默认值
bool 布尔值 True 或 False False
byte 1字节 无符号整数 0 到 255 0
char 2字节 Unicode 字符 U +0000 到 U +ffff '\0'
short 2字节 有符号整数类型 -32,768 到 32,767 0
int 4字节 有符号整数类型 -2,147,483,648 到 2,147,483,647 0
float 4字节 单精度浮点型 -3.4 x 1038 到 + 3.4 x 1038 0.0F
long 8字节 有符号整数类型 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0
double 8字节 双精度浮点型 (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 0.0D
decimal 16字节 精确的十进制值,28-29 有效位数 (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 0.0M

引用类型(Reference types)

引用类型指的是一个内存位置,如果内存位置的数据是由一个变量改变的,则该引用类型变量会自动反应这种值的变化。内置的引用类型有:objectdynamicstring

  • object 对象类型, 是 C# 所有数据类型的终极基类。object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

    当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱

  • dynamic 动态数据类型, 用于存储任何类型的值,折现变量的类型检查发生在运行时。

    动态类型与对象类型相似,但是对象类型的变量类型检查发生在编译时,而动态类型变量的类型检查发生在运行时。

  • string 字符串类型,是 System.String 类的别名。它是从对象(Object)类型派生的。String类型的值可以通过两种形式进行分配:引号和 @引号(加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待)。

指针类型(Pointer types)

指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。

C#类型转换

  • 隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。小范围转大范围时使用。

  • 显式类型转换 - 强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。

    大范围转小范围时使用。

// 数值类型转换
int intNum;
long longNum = 1;
intNum = (int) longNum;// 大范围转小范围 需要强制类型转换
longNum = intNum;// 小范围转大范围 自动类型转换
Console.WriteLine(intNum);// 1
Console.WriteLine(longNum);// 1

// 字符串转换数值
// 方式一 int.Parse()
int num1 = int.Parse("111");
Console.WriteLine(num1);// 111
// int num2 = int.Parse("a");// 抛System.FormatException
// 方式二 int.TryParse()
bool isSuccess = int.TryParse("a", out int num3);
Console.WriteLine(isSuccess);// False
Console.WriteLine(num3);// 0
// 方式三 Convert.ToInt32()
//int num4 = Convert.ToInt32("a"); // 抛System.FormatException
//Console.WriteLine(num4);

// 引用类型之间的转换
Student student = new Student();
object obj = student as object;
Console.WriteLine(obj);
object obj1 = new object();
Student student``````1 = obj1 as Student;
Console.WriteLine(student1==null);// True 转换失败返回null
object obj2 = null as object;
Console.WriteLine(obj2 == null);// True

C#常量

整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,没有前缀则表示十进制。

整数常量也可以有后缀,可以是 U 和 L 的组合,其中,U 和 L 分别表示 unsigned 和 long。后缀可以是大写或者小写,多个后缀以任意顺序进行组合。

定义常量:使用const关键字

C#可空类型

? 单问号用于对 int、double、bool 等无法直接赋值为 null 的数据类型进行 null 的赋值,意思是这个数据类型是 Nullable 类型的。

int i; //默认值0
int? ii; //默认值null

Null合并运算符(??),如果第一个操作数的值为 null,则运算符返回第二个操作数的值,否则返回第一个操作数的值。

int? num1 = null;
int? num2 = 666;
int num3;
num3 = num1 ?? num2; // num1为空,所以返回num2。即num3的值为666


这篇关于C#基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程