C#基础知识总结

C语言、C++和C#的区别

面向对象编程(OOP):

C 是一种过程化的编程语言,它不直接支持面向对象编程。然而,C++ 是一种支持 OOP 的 C 的超集,它引入了类、对象、继承、多态等概念。C# 是完全面向对象的,它的一切都是对象,且只支持单一继承,但支持接口和委托实现多态。

内存管理:

在 C 中,开发人员直接负责内存管理,包括分配和释放内存。C++ 提供了新的关键字 new 和 delete 来帮助自动管理内存。在 C# 中,内存管理完全由 .NET Framework 的垃圾回收器自动处理。

标准库:

C 的标准库相对较小,但功能强大且高效。C++ 提供了大量的标准库,包括 STL(Standard Template Library)等。C# 的 .NET 框架提供了大量的类库,包括 System、System.Data、System.Text 等。

平台:

C 是通用的语言,可以运行在几乎所有的操作系统和硬件上。C++ 的编译结果与平台相关,但也可跨平台。C# 是为 .NET Framework 设计的,最初只能在 Windows 上运行,但现在也有跨平台的实现,如 Mono。

执行速度:

通常,C 和 C++ 的执行速度要比 C# 快。这是因为 C# 的运行时环境(即 Common Language Runtime,CLR)需要为安全性和跨语言兼容性进行一些额外的检查和处理。

学习曲线:

一般来说,C# 对于初学者来说较为友好,因为它提供了许多抽象和便利的特性。C 和 C++ 则更复杂,需要更多的学习和实践才能熟练掌握。

用途:

C 由于其灵活性和低级特性,常用于操作系统、嵌入式系统、游戏开发等需要直接和硬件打交道的领域。C++ 在系统级和高性能计算中广泛应用,如游戏开发、科学计算等。C# 则常用于开发桌面应用、网页应用、服务端应用等,尤其在 Windows 平台上非常流行。

这些区别使得三种语言在不同的应用场景中有各自的优点和适用性。选择哪种语言通常取决于项目的具体需求、开发团队的技能和项目的目标平台等因素。

C#简介

C# 读作 "C Sharp",这是一种面向对象的高级编程语言,由微软公司开发。C# 是 .NET 框架的主要编程语言之一,广泛用于开发 Windows 应用程序、网页应用程序以及各种其他软件项目。"Sharp" 这个词在音乐领域表示升半音,因此 C# 的名称暗示着它是对 C 语言功能的一种扩展或提高。

参考菜鸟教程:

C# 教程 | 菜鸟教程

虽然 C# 的构想十分接近于传统高级语言 C 和 C++,是一门面向对象的编程语言,但是它与 Java 非常相似,有许多强大的编程功能,因此得到广大程序员的青睐。

下面列出 C#一些重要的功能:

●布尔条件(Boolean Conditions)

●自动垃圾回收(Automatic Garbage Collection)

●标准库(Standard Library)

●组件版本(Assembly Versioning)

●属性(Properties)和事件(Events)

●委托(Delegates)和事件管理(Events Management)

●易于使用的泛型(Generics)

●索引器(Indexers)

●条件编译(Conditional Compilation)

●简单的多线程(Multithreading)

●LINQ 和 Lambda 表达式

●集成 Windows

C# 环境

在这一章中,我们将讨论创建 C# 编程所需的工具。我们已经提到 C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,让我们先了解一下 C# 与 .Net 框架之间的关系。

.Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序:

●Windows 应用程序

●Web 应用程序

●Web 服务

.Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。

.Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件:

●公共语言运行库(Common Language Runtime - CLR)

●.Net 框架类库(.Net Framework Class Library)

●公共语言规范(Common Language Specification)

●通用类型系统(Common Type System)

●元数据(Metadata)和组件(Assemblies)

●Windows 窗体(Windows Forms)

●ASP.Net 和 ASP.Net AJAX

●ADO.Net

●Windows 工作流基础(Windows Workflow Foundation - WF)

●Windows 显示基础(Windows Presentation Foundation)

●Windows 通信基础(Windows Communication Foundation - WCF)

●LINQ

如需了解每个组件的详细信息,请参阅微软(Microsoft)的文档。

C# 的集成开发环境(Integrated Development Environment - IDE)

微软(Microsoft)提供了下列用于 C# 编程的开发工具:

●Visual Studio 2010 (VS)

●Visual C# 2010 Express (VCE)

●Visual Web Developer

后面两个是免费使用的,可从微软官方网址下载。使用这些工具,您可以编写各种 C# 程序,从简单的命令行应用程序到更复杂的应用程序。您也可以使用基本的文本编辑器(比如 Notepad)编写 C# 源代码文件,并使用命令行编译器(.NET 框架的一部分)编译代码为组件。

Visual C# Express 和 Visual Web Developer Express 版本是 Visual Studio 的定制版本,且具有相同的外观和感观。它们保留 Visual Studio 的大部分功能。

C# 程序结构

在我们学习 C# 编程语言的基础构件块之前,让我们先看一下 C# 的最小的程序结构。

C# Hello World 实例

一个 C# 程序主要包括以下部分:

●命名空间声明(Namespace declaration)

●一个 class

●Class 方法

●Class 属性

●一个 Main 方法

●语句(Statements)& 表达式(Expressions)

●注释

C# 文件的后缀为 .cs。

以下创建一个 test.cs 文件,文件包含了可以打印出 "Hello World" 的简单代码:

让我们看一下上面程序的各个部分:

●程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。

●下一行是 namespace 声明。一个 namespace 里包含了一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。

●下一行是 class 声明。类 HelloWorld 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,HelloWorld 类只有一个 Main 方法。

●下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。

●下一行 /*...*/ 将会被编译器忽略,且它会在程序中添加额外的 注释。

●Main 方法通过语句 Console.WriteLine("Hello World"); 指定了它的行为。

●WriteLine 是一个定义在 System 命名空间中的 Console 类的一个方法。该语句会在屏幕上显示消息 "Hello World"。

●最后一行 Console.ReadKey(); 是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。

以下几点值得注意:

●C# 是大小写敏感的。

●所有的语句和表达式必须以分号(;)结尾。

●程序的执行从 Main 方法开始。

●与 Java 不同的是,文件名可以不同于类的名称。

编译 & 执行 C# 程序

如果您使用 Visual Studio.Net 编译和执行 C# 程序,请按下面的步骤进行:

●启动 Visual Studio。

●在菜单栏上,选择 File -> New -> Project。

●从模板中选择 Visual C#,然后选择 Windows。

●选择 Console Application。

●为您的项目制定一个名称,然后点击 OK 按钮。

●新项目会出现在解决方案资源管理器(Solution Explorer)中。

●在代码编辑器(Code Editor)中编写代码。

●点击 Run 按钮或者按下 F5 键来运行程序。会出现一个命令提示符窗口(Command Prompt window),显示 Hello World。

若提示无法识别 csc 命令,需配置环境变量(Window10)

找到桌面上的“计算机”图标,右键单击,并在弹出的菜单中点击 “属性” --"高级系统设置"--"环境变量"--"系统变量",找到变量 Path, 添加一个路径 ;

C:\Windows\Microsoft.NET\Framework\v2.0.50727\

注意,多个路径使用分号(;)隔开,Windows其他版本追加在后面即可。

C#基本结构

C# 是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的 class 中。

例如,以 Rectangle(矩形)对象为例。它具有 length 和 width 属性。根据设计,它可能需要接受这些属性值、计算面积和显示细节。

让我们来看看一个 Rectangle(矩形)类的实现,并借此讨论 C# 的基本结构:

可见,c语言中用结构体封装来模拟面向对象,是为了操作对象,干活的还是我们自己;而真正的面向对象语言,是直接指挥某个对象自己干活。

using 关键字

在任何 C# 程序中的第一条语句都是:using System;

using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句。

class 关键字

class 关键字用于声明一个类。

C# 中的注释

注释是用于解释代码。编译器会忽略注释的条目。同C语言。

成员变量

变量是类的属性或数据成员,用于存储数据。在上面的程序中,Rectangle 类有两个成员变量,名为 length 和 width。

成员函数

函数是一系列执行指定任务的语句。类的成员函数是在类内声明的。我们举例的类 Rectangle 包含了三个成员函数: AcceptDetails、GetArea 和 Display。

实例化一个类

在上面的程序中,类 ExecuteRectangle 是一个包含 Main() 方法和实例化 Rectangle 类的类。

标识符

标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

●标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。

●标识符中的第一个字符不能是数字。

●标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。

●标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。

●标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。

●不能与C#的类库名称相同。

C#数据类型

直接参考:

C# 数据类型 | 菜鸟教程

值类型

值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。

值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

下表列出了 C# 2010 中可用的值类型:

注意,这里面的char字符是16位的uincode字符。

另外,还有个decimal的十进制的变量类型。

引用类型(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一样,C#也有隐式类型转换和显式类型转换。

C#提供了一些类型转换函数

具体参考:

C# 类型转换 | 菜鸟教程

C#变量

变量具体参考:C# 变量 | 菜鸟教程

变量作用域参考:C# 变量作用域 | 菜鸟教程

注意,全局变量在类层面上都是可见的,静态变量只在其所定义的类里面可见。

C#常量

具体参考:C# 常量 | 菜鸟教程

C#运算符

具体参考:C# 运算符 | 菜鸟教程

C#判断和循环

具体参考:

C# 判断 | 菜鸟教程

C# 循环 | 菜鸟教程

C#封装

具体参考:C# 封装 | 菜鸟教程

C#方法

具体参考:C# 方法 | 菜鸟教程

其实就是函数。 

C#可空类型

C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,也可以赋予null 值,即使是值类型,也可以赋予null。

例如,Nullable< Int32 >,读作"可空的 Int32",可以被赋值为 -2,147,483,648 到2,147,483,647 之间的任意值,也可以被赋值为 null 值。类似的,Nullable< bool > 变量可以被赋值为 true 或 false 或 null。

在处理数据库和其他包含可能未赋值的元素的数据类型时,将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义。

声明一个 nullable 类型(可空类型)的语法如下:

C#数组

具体参考:C# 数组(Array) | 菜鸟教程

C#字符串

具体参考:C# 字符串(String) | 菜鸟教程 

C#结构体

具体参考:C# 结构体(Struct) | 菜鸟教程 

C#枚举

具体参考:C# 枚举(Enum) | 菜鸟教程

C#类

具体参考:C# 类(Class) | 菜鸟教程

C#继承

具体参考:C# 继承 | 菜鸟教程

继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。

当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类

继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。

基类和派生类

一个类可以继承自另一个类,被称为基类(父类)和派生类(子类)。

C# 不支持类的多重继承,但支持接口的多重继承,一个类可以实现多个接口。

概括来说:一个类可以继承多个接口,但只能继承自一个类。

C# 中创建派生类的语法如下:

派生类会继承基类的成员(字段、方法、属性等),除非它们被明确地标记为私有(private)。派生类可以通过关键字base来调用基类的构造函数和方法。

派生类继承了基类的成员变量和成员方法。因此父类对象应在子类对象创建之前被创建。您可以在成员初始化列表中进行父类的初始化。

C#多态

具体参考:C# 多态性 | 菜鸟教程

C#接口

具体参考:C# 接口(Interface) | 菜鸟教程

C#命名空间

其实就是多了个管理层级。

具体参考:C# 命名空间(Namespace) | 菜鸟教程

命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:

为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示:

using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中用 System 命名空间,其中定义了类 Console。我们可以只写:

您也可以使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/292085.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

neo4j相同查询语句一次查询特慢再次查询比较快。

现象&#xff1a; neo4j相同查询语句一次查询特慢再次查询比较快。 分析&#xff1a; 查询语句 //查询同名方法match(path:Method) where id(path) in [244333030] and NOT path:Constructor//是rpc的方法match(rpc_method:Method)<-[:DECLARES]-(rpc_method_cls:Class) -…

实现ls -l 功能,index,rindex函数的使用

index(); rindex();----------------------------------------------------------------- index第一次遇到字符c&#xff0c;rindex最后一次遇到字符c&#xff0c;返回值都是从那个位置开始往后的字符串地址 #include <stdio.h> #include <sys/types.h> #include &…

【2023】kafka入门学习与使用(kafka-2)

目录&#x1f4bb; 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型&#xff1a; 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

阿里云2核4G服务器租用价格_30元3个月_165元一年_199元

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

智慧城市数字孪生,综合治理一屏统览

现代城市作为一个复杂系统&#xff0c;牵一发而动全身&#xff0c;城市化进程中产生新的矛盾和社会问题都会影响整个城市系统的正常运转。智慧城市是应对这些问题的策略之一。城市工作要树立系统思维&#xff0c;从构成城市诸多要素、结构、功能等方面入手&#xff0c;系统推进…

Python面对对象 - 类的反射机制

Python面对对象类的反射机制是面向对象编程语言中比较重要的功能&#xff0c;可以动态获取对象信息以及动态调用对象。通过字符串形式的类名或属性来访问对应类或属性。 一、对象的反射 1. getattr 获取指定字符串名称的对象属性、方法&#xff1a; 当访问的属性不存在时&#…

微服务(基础篇-007-RabbitMQ)

目录 初识MQ(1) 同步通讯&#xff08;1.1&#xff09; 异步通讯&#xff08;1.2&#xff09; MQ常见框架&#xff08;1.3&#xff09; RabbitMQ快速入门(2) RabbitMQ概述和安装&#xff08;2.1&#xff09; 常见消息模型&#xff08;2.2&#xff09; 快速入门&#xff…

分布式理论:CAP理论 BASE理论

文章目录 1. CAP定理1.1 一致性1.3 分区容错1.4 矛盾 2. BASE理论3. 解决分布式事务的思路4. 扩展 解决分布式事务问题&#xff0c;需要一些分布式系统的基础知识作为理论指导。 1. CAP定理 Consistency(一致性): 用户访问分布式系统中的任意节点&#xff0c;得到的数据必须一…

【opencv】教程代码 —features2D(2)

使用SURF算法检测两幅图关键点后暴力匹配 SURF特征检测 使用SURF&#xff08;Speeded Up Robust Features&#xff09;算法来检测两张图像之间的关键点&#xff0c;并使用FLANN&#xff08;Fast Library for Approximate Nearest Neighbors&#xff09;基于特征描述符向量进行匹…

Windows中忘记MySQL ROOT密码的解决方法

在需要ROOT身份登录MySQL但又忘记密码时&#xff0c;可以先已管理员身份运行cmd命令窗口,输入以下命令停止MySQL服务 net stop mysql 随后cd到MySQL安装目录下的bin目录下 D: //我的安装在D盘 cd D:\MySQL\bin 使用跳过权限验证的方式起启动MySQL mysqld --console --skip-g…

跨境电商IP防关联是什么?有什么作用?

做跨境电商的朋友应该都知道IP防关联这个词,那么为何IP需要防关联呢&#xff1f;今天为大家来解答这个问题。 跨境电商IP防关联是指在跨境电商运营中&#xff0c;通过采取一系列技术手段&#xff0c;确保每个跨境电商账号使用独立的IP地址&#xff0c;以避免账号之间因为IP地址…

搜索与图论——Kruskal算法求最小生成树

kruskal算法相比prim算法思路简单&#xff0c;不用处理边界问题&#xff0c;不用堆优化&#xff0c;所以一般稀疏图都用Kruskal。 Kruskal算法时间复杂度O(mlogm) 每条边存结构体里&#xff0c;排序需要在结构体里重载小于号 判断a&#xff0c;b点是否连通以及将点假如集合中…

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下&#xff09;--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值&#xff0c;说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……

link 样式表是否会阻塞页面内容的展示?取决于浏览器,edge 和 chrome 会,但 firefox 不会。

经过实测&#xff1a; 在 head 中 link 一个 1M 大小的样式表。设置网络下载时间大概为 10 秒。 edge 和 chrome 只有在下载完样式表后&#xff0c;页面上才会出现内容。而 firefox 可以直接先显示内容&#xff0c;然后等待样式表下载完成后再应用样式。 DOMContentLoaded 事…

vue系统——v-html

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>v-html指令</title> </head> <body&…

OSPF基本原理和概念

文章目录 背景知识OSPF协议概述&#xff1a;OSPF区域的表示OSPF 骨干区域 –区域0OSPF 非骨干区域 -非0区域OSPF的五种区域类型OSPF工作原理OSPF 的报文类型OSPF邻居表中的七个状态 总结 背景知识 一台路由设备如何获取其他网段的路由&#xff0c;并加入到路由表中 直连路由 …

虚拟机 centos 安装后与主机 ip保持一致

1、安装时 网络模式 悬着自动检测 &#xff08;桥接&#xff09; 2、打开网络 这里如果没有打开 就去 编辑 该文件。把ONBOOTno 改为yes 后 vim /etc/sysconfig/network-scripts/ifcfg-ens160 刷新配置 systemctl restart network 再查看addr 与本机 192.168.31.xx 在同…

Java23种常见设计模式汇总

七大原则网站地址&#xff1a;设计模式7大原则&#xff0b;类图关系-CSDN博客 创建型设计模式&#xff1a;创建型设计模式合集-CSDN博客 七大结构型设计模式&#xff1a;7大结构型设计模式-CSDN博客 11种行为型设计模式&#xff1a; 11种行为型模式&#xff08;上&#xff0…

设计模式之装饰模式精讲

概念&#xff1a;动态地给一个对象添加一些额外的职责。 装饰器模式侧重于在不改变接口的前提下动态地给对象添加新功能&#xff0c;保持对象结构的透明性&#xff0c;客户端无感知。 以一个咖啡制作和装饰的例子来帮助大家理解&#xff1a; public interface Coffee {double…

基于单片机GPS轨迹定位和里程统计系统

**单片机设计介绍&#xff0c;基于单片机GPS轨迹定位和里程统计系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机GPS轨迹定位和里程统计系统是一个集成了GPS定位技术、单片机控制以及里程统计功能的综合性系统。该系…