“好读书,不求甚解;每有会意,便欣然忘食。”
文章目录
写在开始
昨天我们学习了C#语言的二维数组和结构体,今天我们一起来看一下C#面向对象和高级特性:
学习是一个持之以恒的过程,当你见识到越多的大佬,越来越多的天才,才会明白自己差距所在,每每这时,你的耳边会不会想起那句“菜就多练”呢?写博客也是为了鞭策我不断的去学习,去思考怎么才能变得更加强大。人生就是这样,To learn To cope. 去学习,去应对。与君共勉。
C#的面向对象与Java类似,是一种高效的思想,我们可以联系Java面向对象的特性来学习。
文章有误敬请斧正 不胜感恩!||Day05
以下是本篇文章正文内容:
一、C#面向对象编程简介
C#(发音为“C Sharp”)是一种现代的、面向对象的编程语言,由微软开发,作为其 .NET 框架的一部分。面向对象编程(OOP)是一种编程范式,基于“对象”和“类”的概念,旨在提高代码的可重用性、可扩展性和可维护性。
1. 类与对象
- 类(Class):类是对象的蓝图或模板,定义了对象的属性和行为。例如,可以定义一个“Person”类,包含“Name”和“Age”属性以及“Speak”行为。
- 对象(Object):对象是类的实例化,代表实际存在的实体。例如,可以创建一个“John”对象,他是“Person”类的实例,拥有具体的“Name”和“Age”。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Speak()
{
Console.WriteLine($"My name is {Name} and I am {Age} years old.");
}
}
// 实例化对象
Person john = new Person();
john.Name = "John";
john.Age = 30;
john.Speak(); // 输出:My name is John and I am 30 years old.
2. 封装(Encapsulation)
封装是将对象的状态(属性)和行为(方法)隐藏在类内部,只通过公开的方法访问和修改。这提高了数据的安全性和代码的可维护性。
public class BankAccount
{
private decimal balance;
public void Deposit(decimal amount)
{
if (amount > 0)
{
balance += amount;
}
}
public decimal GetBalance()
{
return balance;
}
}
3. 继承(Inheritance)
继承允许一个类(子类)从另一个类(父类)继承属性和行为,从而实现代码的重用和扩展。
public class Animal
{
public void Eat()
{
Console.WriteLine("Eating...");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Barking...");
}
}
// 实例化对象
Dog myDog = new Dog();
myDog.Eat(); // 输出:Eating...
myDog.Bark(); // 输出:Barking...
4. 多态(Polymorphism)
多态性允许对象以不同的方式响应相同的消息,通常通过方法重载和方法重写实现。
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some generic animal sound");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Bark");
}
}
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 输出:Bark
二、C#高级特性
1. 委托和事件(Delegates and Events)
委托是一种引用方法的类型,可以将方法作为参数传递。事件是委托的特殊形式,用于实现发布-订阅模式。
public delegate void Notify(); // 定义委托
public class ProcessBusinessLogic
{
public event Notify ProcessCompleted; // 定义事件
public void StartProcess()
{
// 执行某些操作
OnProcessCompleted();
}
protected virtual void OnProcessCompleted()
{
ProcessCompleted?.Invoke();
}
}
public class Program
{
public static void Main()
{
ProcessBusinessLogic bl = new ProcessBusinessLogic();
bl.ProcessCompleted += Bl_ProcessCompleted; // 订阅事件
bl.StartProcess();
}
private static void Bl_ProcessCompleted()
{
Console.WriteLine("Process Completed!");
}
}
2. Lambda表达式(Lambda Expressions)
Lambda表达式是简洁的匿名方法,可以用于简化代码,特别是在LINQ查询中。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
evenNumbers.ForEach(n => Console.WriteLine(n)); // 输出:2 4
3. LINQ(Language Integrated Query)
LINQ是一组方法和语法,允许对集合进行查询和操作。
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = from n in numbers
where n % 2 == 0
select n;
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 输出:2 4
}
4. 异步编程(Asynchronous Programming)
异步编程使程序能够在等待长时间运行的任务时保持响应。
public async Task<string> DownloadDataAsync(string url)
{
using (HttpClient client = new HttpClient())
{
string result = await client.GetStringAsync(url);
return result;
}
}
public async Task ProcessDataAsync()
{
string data = await DownloadDataAsync("https://example.com");
Console.WriteLine(data);
}
5. 泛型(Generics)
泛型允许类、方法、接口和委托在定义时不指定特定的数据类型,提高了代码的重用性和类型安全性。
public class GenericList<T>
{
private List<T> items = new List<T>();
public void Add(T item)
{
items.Add(item);
}
public T GetItem(int index)
{
return items[index];
}
}
GenericList<int> intList = new GenericList<int>();
intList.Add(1);
intList.Add(2);
Console.WriteLine(intList.GetItem(0)); // 输出:1
总结
C#的面向对象是及其重要的部分,只有掌握了面向对象的思想才算掌握了精髓部分。
同时,C#提供了丰富的特性和功能,使开发者能够编写高效、可维护的代码。通过理解和应用这些特性,我们可以大大提高自己的编程能力和项目的质量。