C#(读作“C-Sharp”)是微软公司开发的一种现代、通用、面向对象的编程语言。它于2000年首次发布,并作为.NET框架的一部分进行推广。C#语言结合了C++的高性能和Visual Basic的简单易用,旨在提供一种既强大又易于学习的语言。
2.7.1.C#的历史背景
C#的开发始于1999年,由Anders Hejlsberg领导的团队负责。这一语言的设计初衷是为了支持软件组件的快速开发,并且具有跨平台兼容性。随着.NET Core和.NET 5/6的推出,C#进一步增强了跨平台的开发能力。
2.7.2.C#的主要特性
面向对象编程(OOP):C#完全支持面向对象编程,包括封装、继承和多态性。面向对象编程使得代码更具模块化和可维护性。
类型安全:C#是一种强类型语言,编译器在编译时进行类型检查,从而减少运行时错误。类型安全性确保了变量只能包含特定类型的数据,从而提高了代码的可靠性。
自动垃圾回收:C#中的垃圾回收器(Garbage Collector)自动管理内存,从而减少内存泄漏和管理复杂性。开发者不需要手动释放内存,这有助于防止内存泄漏和其他与内存管理相关的问题。
简洁且易读的语法:C#的语法设计简单且一致,使得代码易于编写和维护。开发者可以迅速上手并编写高效的代码。
跨平台支持:通过.NET Core和.NET 5/6,C#可以在Windows、Linux和macOS等多种平台上运行。跨平台支持使得开发者可以编写一次代码并在多个平台上运行。
丰富的类库:C#提供了丰富的类库(Class Library),涵盖了从数据访问、网络通信到图形界面开发等各个方面的功能,使得开发工作更加高效。
2.7.3.C#的基础语法
变量和数据类型:C#支持多种数据类型,包括整数、浮点数、字符、字符串和布尔值。
int number = 10;
double price = 99.99;
string name = "John";
bool isActive = true;
条件语句:C#使用if、else if和else语句进行条件判断。
if (number > 0) {
Console.WriteLine("Number is positive");
} else {
Console.WriteLine("Number is not positive");
}
循环:C#支持多种循环结构,包括for循环、while循环和foreach循环。
for (int i = 0; i < 10; i++) {
Console.WriteLine(i);
}
int j = 0;
while (j < 10) {
Console.WriteLine(j);
j++;
}
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int num in numbers) {
Console.WriteLine(num);
}
方法:方法是C#中代码的基本组织单位,用于执行特定的任务。
public void Greet() {
Console.WriteLine("Hello, World!");
}
public int Add(int a, int b) {
return a + b;
}
类和对象:C#是面向对象的编程语言,类是对象的蓝图。
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public void Introduce() {
Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
}
}
Person person = new Person();
person.Name = "John";
person.Age = 30;
person.Introduce();
2.7.4.面向对象编程
C#支持所有面向对象编程的核心概念:
(1)类和对象
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public void Introduce() {
Console.WriteLine($"Hello, my name is {Name} and I am {Age} years old.");
}
}
Person person = new Person();
person.Name = "John";
person.Age = 30;
person.Introduce();
(2)继承:继承允许一个类从另一个类继承字段和方法,从而实现代码重用。
public class Employee : Person {
public string Company { get; set; }
public void Work() {
Console.WriteLine($"{Name} is working at {Company}.");
}
}
Employee employee = new Employee();
employee.Name = "John";
employee.Age = 30;
employee.Company = "ABC Corp";
employee.Work();
(3)多态性:多态性允许使用基类引用调用子类的方法,从而实现灵活的代码设计。
public class Animal {
public virtual void Speak() {
Console.WriteLine("Animal is making a sound");
}
}
public class Dog : Animal {
public override void Speak() {
Console.WriteLine("Dog is barking");
}
}
Animal myDog = new Dog();
myDog.Speak(); // 输出: Dog is barking
(4)封装:封装通过将数据和方法封装在类内部来保护数据,并提供公共接口进行访问。
public class BankAccount {
private decimal balance;
public void Deposit(decimal amount) {
if (amount > 0) {
balance += amount;
}
}
public void Withdraw(decimal amount) {
if (amount <= balance) {
balance -= amount;
}
}
public decimal GetBalance() {
return balance;
}
}
BankAccount account = new BankAccount();
account.Deposit(100);
account.Withdraw(50);
Console.WriteLine(account.GetBalance()); // 输出: 50
2.7.5.C#的高级特性
(1)LINQ(语言集成查询):LINQ使得查询操作可以直接在C#语言中进行,无论是对集合还是数据库。
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
foreach (var num in evenNumbers) {
Console.WriteLine(num); // 输出: 2, 4, 6, 8, 10
}
(2)异步编程:C#通过async和await关键字提供了强大的异步编程支持。
public async Task GetDataAsync() {
using (HttpClient client = new HttpClient()) {
string data = await client.GetStringAsync("http://example.com");
return data;
}
}
public async void ShowData() {
string data = await GetDataAsync();
Console.WriteLine(data);
}
(3)属性:属性是对类中字段的封装,提供了对字段的访问控制。
public class Person {
private string name;
public string Name {
get { return name; }
set { name = value; }
}
}