全面解析C#:现代编程语言

引言

C#(读作 “C Sharp”)是一种现代、通用、面向对象的编程语言,由微软在2000年开发。它是.NET框架的重要组成部分,广泛应用于桌面应用程序、Web应用程序、游戏开发、企业级解决方案等领域。本文将详细介绍C#的基本概念、高级主题、数据结构、文件操作、LINQ、异步编程,以及如何开发不同类型的应用程序。

入门C#

安装与设置

要开始使用C#,首先需要安装.NET SDK。可以从Microsoft官方网站下载并安装。接着,设置开发环境,推荐使用Visual Studio或VS Code。

编写和运行你的第一个C#程序

安装完成后,打开Visual Studio,新建一个控制台应用程序,并输入以下代码:

using System; 
namespace HelloWorld { class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!");} } 
}

运行程序,将会在控制台输出“Hello, World!”。

基本概念

语法和结构

C#程序由命名空间、类和方法组成。以下是一个简单的C#程序结构:

using System; 
namespace Example 
{ class Program { static void Main(string[] args) { Console.WriteLine("This is an example program."); } } 
}

变量和数据类型

C#支持多种数据类型,如int、float、double、char、string和bool。定义变量的示例如下:

int age = 25; 
float height = 5.9f; 
double weight = 70.5; 
char grade = 'A'; 
string name = "John"; 
bool isStudent = true;

运算符和表达式

C#提供了丰富的运算符,包括算术运算符(+,-,*,/,%),逻辑运算符(&&,||,!),关系运算符(==,!=,>,<,>=,<=)。例如:

int a = 10; 
int b = 20; 
int sum = a + b; 
bool isEqual = (a == b); 
bool isGreater = (a > b) && (b > 0);

控制流

条件语句

条件语句用于根据不同条件执行不同的代码块。

If-else语句
int number = 10; 
if (number > 0) 
{ Console.WriteLine("The number is positive."); 
} 
else 
{ Console.WriteLine("The number is not positive.");}
Switch-case语句
char grade = 'A'; 
switch (grade) 
{ case 'A': Console.WriteLine("Excellent!"); break; case 'B': Console.WriteLine("Good."); break; default: Console.WriteLine("Invalid grade."); break; 
}

循环

For循环
for (int i = 0; i < 5; i++)
{Console.WriteLine("Iteration: " + i);
}
While循环
int count = 0;
while (count < 5)
{Console.WriteLine("Count: " + count);count++;
}
Do-while循环
int number;
do
{Console.WriteLine("Enter a number:");number = Convert.ToInt32(Console.ReadLine());
} while (number <= 0);
Foreach循环
string[] fruits = { "Apple", "Banana", "Cherry" };
foreach (string fruit in fruits)
{Console.WriteLine(fruit);
}

高级主题

C#中的面向对象编程(OOP)

面向对象编程是C#的核心概念,包括类、对象、继承、多态和封装。

类和对象
public class Car
{public string Model;public int Year;public void DisplayInfo(){Console.WriteLine($"Model: {Model}, Year: {Year}");}
}
Car myCar = new Car();
myCar.Model = "Toyota";
myCar.Year = 2020;
myCar.DisplayInfo();
继承
public class Vehicle
{public string Brand;public void Honk(){Console.WriteLine("Honk!");}
}public class Car : Vehicle
{public string Model;public int Year;
}Car myCar = new Car();
myCar.Brand = "Toyota";
myCar.Model = "Corolla";
myCar.Year = 2020;
myCar.Honk();
Console.WriteLine($"Brand: {myCar.Brand}, Model: {myCar.Model}, Year: {myCar.Year}");
多态
public class Animal
{public virtual void MakeSound(){Console.WriteLine("Some sound...");}
}public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("Bark");}
}Animal myDog = new Dog();
myDog.MakeSound();
封装
public class Person
{private string name;public string Name{get { return name; }set { name = value; }}
}
Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name);

异常处理

异常处理用于捕获和处理运行时错误。

Try-catch块
try
{int[] numbers = { 1, 2, 3 };Console.WriteLine(numbers[10]);
}
catch (IndexOutOfRangeException e)
{Console.WriteLine("An error occurred: " + e.Message);
}
自定义异常
public class CustomException : Exception
{public CustomException(string message) : base(message){}
}try
{throw new CustomException("This is a custom exception");
}
catch (CustomException e)
{Console.WriteLine(e.Message);
}

数据结构

数组和列表

定义和使用数组
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[0]);
数组的方法和属性
int[] numbers = { 5, 3, 9, 1, 7 };
Array.Sort(numbers);
foreach (int number in numbers)
{Console.WriteLine(number);
}
列表简介
List<string> names = new List<string> { "John", "Jane", "Jack" };
names.Add("Jill");
Console.WriteLine(names[3]);

字典和集合

使用字典
Dictionary<string, int> ages = new Dictionary<string, int>
{{ "John", 30 },{ "Jane", 28 }
};
Console.WriteLine(ages["John"]);
其他常见集合
Queue<string> queue = new Queue<string>();
queue.Enqueue("A");
queue.Enqueue("B");
Console.WriteLine(queue.Dequeue());Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
Console.WriteLine(stack.Pop());

文件操作

读写文件

// 写入文件
using (StreamWriter writer = new StreamWriter("test.txt"))
{writer.WriteLine("Hello, World!");
}// 读取文件
using (StreamReader reader = new StreamReader("test.txt"))
{string content = reader.ReadToEnd();Console.WriteLine(content);
}

文件处理的最佳实践

确保在使用文件操作时,正确处理异常并关闭文件:

try
{using (StreamWriter writer = new StreamWriter("test.txt")){writer.WriteLine("Hello, World!");}
}
catch (Exception e)
{Console.WriteLine("An error occurred: " + e.Message);
}

LINQ(语言集成查询)

LINQ简介

LINQ(Language Integrated Query)使得在C#中进行数据查询变得简单直观。

查询语法与方法语法

int[] numbers = { 1, 2, 3, 4, 5 };// 查询语法
var result1 = from num in numberswhere num > 2select num;// 方法语法
var result2 = numbers.Where(num => num > 2);foreach (var num in result1)
{Console.WriteLine(num);
}

常见的LINQ操作

int[] numbers = { 1, 2, 3, 4, 5 };
var filteredNumbers = numbers.Where(num => num > 2).OrderBy(num => num);
foreach (var num in filteredNumbers)
{Console.WriteLine(num);
}

异步编程

异步与等待(async和await)简介

异步编程使得程序可以在等待长时间运行的任务时,不会阻塞主线程。

编写异步方法

public async Task<string> GetDataAsync()
{await Task.Delay(2000); // 模拟长时间运行的任务return "Data received";
}public async void ShowData()
{string data = await GetDataAsync();Console.WriteLine(data);
}

基于任务的编程

public Task<string> FetchData()
{return Task.Run(() =>{Thread.Sleep(2000);return "Data fetched";});
}public async void DisplayData()
{string data = await FetchData();Console.WriteLine(data);
}

应用程序开发

控制台应用程序

创建和运行控制台应用程序
class Program
{static void Main(string[] args){Console.WriteLine("Enter two numbers:");int num1 = Convert.ToInt32(Console.ReadLine());int num2 = Convert.ToInt32(Console.ReadLine());Console.WriteLine("Sum: " + (num1 + num2));}
}

Windows Forms和WPF

创建GUI应用程序的基础

使用Windows Forms或WPF可以创建图形用户界面应用程序。

事件处理和UI控件
public partial class MainForm : Form
{public MainForm(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){MessageBox.Show("Button clicked!");}
}

ASP.NET Core

C#中的Web开发简介

ASP.NET Core是一个用于构建Web应用程序的框架。

创建和运行一个简单的Web应用程序
public class Startup
{public void ConfigureServices(IServiceCollection services){}public void Configure(IApplicationBuilder app, IWebHostEnvironment env){app.Run(async (context) =>{await context.Response.WriteAsync("Hello, World!");});}
}

最佳实践和编码标准

编写干净和可维护代码

  • 遵循命名约定
  • 使用注释和文档
  • 避免硬编码

常见编码规范

  • 使用驼峰命名法和帕斯卡命名法
  • 控制语句块使用大括号

重构技巧和技术

  • 提取方法
  • 合并重复代码
  • 使用设计模式

结论

C#是一门功能强大且灵活的编程语言,适用于多种开发需求。

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

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

相关文章

PHP数据结构之队列

本文由 ChatMoney团队出品 队列是一种基本的数据结构&#xff0c;遵循先进先出&#xff08;FIFO, First In First Out&#xff09;原则&#xff0c;即最先添加的元素将是最先被移除的。在本篇文章中&#xff0c;我们将深入探讨队列的概念&#xff0c;并通过PHP代码实现一个简单…

Android 通知访问权限

问题背景 客户反馈手机扫描三方运动手表&#xff0c;下载app安装后&#xff0c;通知访问权限打不开。 点击提示“受限设置” “出于安全考虑&#xff0c;此设置目前不可用”。 问题分析 1、setting界面搜“授予通知访问权限”&#xff0c;此按钮灰色不可点击&#xff0c;点…

TensorFlow系列:第三讲:MobileNetV2使用介绍

使用TensorFlow官方提供的API进行模型训练&#xff0c;keras系列API中&#xff0c;存在很多算法&#xff0c;使用MobileNetV2进行讲解。 一. MobileNetV2简介 MobileNetV2 是由 Google 在 2018 年发布的一种轻量级深度神经网络架构&#xff0c;旨在优化移动设备和嵌入式设备上…

<PLC><模拟量><SMC>使用SMC温度流量传感器PF3W系列与汇川PLC进行模拟量通讯的接线与设置

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…

微服务节流阀:Eureka中服务限流策略的精妙实现

微服务节流阀&#xff1a;Eureka中服务限流策略的精妙实现 引言 在微服务架构中&#xff0c;服务的稳定性和可靠性至关重要。限流策略作为保障服务稳定性的一种手段&#xff0c;通过控制服务的访问速率&#xff0c;可以有效避免服务过载和故障扩散。Eureka作为Netflix开源的服…

大小端详解

引例 我们知道整形(int)是4个字节&#xff0c;例如随便举个例子&#xff1a;0x01020304&#xff0c;它一共占了四个地址位&#xff0c;01,02,03,04分别占了一个字节&#xff08;一个字节就对应了一个地址&#xff09;。 那么就会有个问题&#xff1a;我们的01到底是存储在高地…

mysql 5.7.44 32位 zip安装

前言 因为研究别人代码&#xff0c;他使用了5.7的 32位 mysql &#xff0c;同时最新的 8.4 64位 mysql 不能用官方lib连接。所以安装这个版本使用&#xff0c;期间有些坑&#xff0c;在这里记录一下。 下载路径 mysql官方路径&#xff1a;https://downloads.mysql.com/archi…

软考高级第四版备考--第15天(管理团队)Management Team

定义&#xff1a;跟踪团队成员工作表现、提供反馈、解决问题并管理团队变更以优化项目绩效的过程 作用&#xff1a;影响团队行为&#xff0c;管理冲突以及解决问题。 输入&#xff1a;项目管理计划&#xff08;资源管理计划&#xff09;、项目文件&#xff08;问题日志、经验…

Android IdleHandler源码分析

文章目录 Android IdleHandler源码分析概述前提基本用法源码分析添加和删除任务执行任务 应用场景 Android IdleHandler源码分析 概述 IdleHandler是一个接口&#xff0c;它定义在MessageQueue类中&#xff0c;用于在主线程的消息队列空闲时执行一些轻量级的任务。IdleHandle…

Linux——多线程(五)

1.线程池 1.1初期框架 thread.hpp #include<iostream> #include <string> #include <unistd.h> #include <functional> #include <pthread.h>namespace ThreadModule {using func_t std::function<void()>;class Thread{public:void E…

Redis 7.x 系列【21】主从复制

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Redis 版本 7.2.5 源码地址&#xff1a;https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 概述2. 工作原理2.1 建立连接2.2 全量复制2.3 命令传播2.4 增量复制 3. 拓扑架构3.…

Uniapp表单提交

template中&#xff1a; <template><view class""><button class"tianjia" click"tianjia">添加</button><view class"divOne" v-show"a"><text class"guanbi" click"gua…

本地 HTTP 文件服务器的简单搭建 (deno/std)

首发日期 2024-06-30, 以下为原文内容: 在本地局域网搭建一个文件服务器, 有很多种方式. 本文介绍的是窝觉得比较简单的一种. 文件直接存储在 btrfs 文件系统之中, 底层使用 LVM 管理磁盘, 方便扩容. 使用 btrfs RAID 1 进行镜像备份 (一个文件在 2 块硬盘分别存储一份), 防止…

Python 读取和写入文本文件(txt)、Excel 文件和 JSON 文件的方法

Python 读取和写入文本文件&#xff08;txt&#xff09;、Excel 文件和 JSON 文件的基本方法 读取/写入 txt 文件基本读取txt读取 txt 文件写入 txt 文件按行读取复杂数据处理大txt文本文件&#xff08;逐行读取以节省内存&#xff09; 读取/写入 Excel 文件基本读取读取 Excel…

Transformer和Bert的原理是什么

文章目录 一、Transformer原理二、Bert的原理 一、Transformer原理 Transformer是一种基于注意力机制&#xff08;Attention Mechanism&#xff09;的深度学习模型架构&#xff0c;最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。Transformer主要用于处…

Tomcat异常处理【Spring源码学习】

当没有指定具体控制器异常处理方法时&#xff0c;默认走的异常会被tomcat捕获&#xff1b; /** * 基于ControllerAdvice的异常处理只能处理Spring层面的异常&#xff1b; * 如果我们自定义了过滤器在过滤器中抛出了异常这种情况下需要更高级的异常捕获 * ControllerAdvice无法…

Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现

google/uuid 库地址 本文将解析 googl/uuid 库中 UUID 变体10版本4的实现。 版本 4 的 UUID 采取完全随机的方式实现&#xff0c;简单来说就是将 UUID 中的 122 位全部随机填充&#xff08;剩余的 6 位作标记位&#xff09;。版本 4 的 UUID 存在一定的重复风险&#xff0c;但…

PostgreSQL 复制延迟

PostgreSQL 的流复制&#xff08;Streaming Replication&#xff09;是一种高效的复制机制&#xff0c;用于在主服务器和一个或多个备用服务器之间传输数据&#xff0c;以实现高可用性和负载均衡。然而&#xff0c;复制一旦延迟可能会带来显著的挑战。本文将带您了解有关 Postg…

springboot中在filter中用threadlocal存放用户身份信息

本文章主要描述通过springboot的filter类&#xff0c;在过滤器中设置jwt信息进行身份信息保存的方法 流程&#xff1a;请求->过滤器->解析请求的body信息->放入threadlocal中 定义filter:一个使用 Servlet 规范的过滤器&#xff08;Filter&#xff09;&#xff0c;它…

网络通信、BIO、NIO

1. 涉及的网络基础知识 Socket&#xff1a; 操作系统提供的api&#xff0c;介于应用层和tcp/ip层之间的软件层&#xff0c;封装服务器客户端之间网络通信相关内容&#xff0c;方便调用 IO多路复用&#xff1a; &#xff08;I/O Multiplexing&#xff09;是一种IO操作模式&a…