一文带你吃透C#中面向对象的相关知识
什么是面向对象
面向对象编程是一种编程方法和思想,它的核心是将事物抽象为对象,并通过对象之间的交互来完成任务。在C#中,一切皆为对象,包括类和结构体等用户定义的类型,以及基本类型如int,float等。
类与对象
类是创建对象的模板,它定义了对象的属性和方法。对象是类的实例,它是内存中分配的一块区域,可以存储类的属性值。
在C#中,定义类的基本语法如下:
public class MyClass{
//类的属性
public string MyProperty{get;set;}
//类的方法
public void MyMethod(){
//方法体
}
}
创建类的实例需要使用关键字new
,如下所示:
MyClass myObject = new MyClass();
继承
继承是一种重要的面向对象编程概念,它允许新创建的类继承现有类的属性和方法。通过继承,可以避免重复编写相同的代码,提高了代码的可重用性。
在C#中,使用关键字class
定义的类默认为继承自System.Object
类,可以使用冒号符号指定父类,如下所示:
public class MyBaseClass{
//父类属性与方法
}
public class MySubClass : MyBaseClass{
//子类新增属性与方法
}
封装
封装是一种保护对象属性的方法,通过使用public
、private
、protected
等访问限定符来控制对象属性的访问权限。封装可以提高程序的健壮性和安全性。
在C#中,定义属性和方法时可以指定访问限定符,如下所示:
public class MyClass{
private string myData; //私有属性
//公有属性,通过get/set方法访问私有属性
public string MyProperty{
get {return myData;}
set {myData = value;}
}
//公有方法
public void MyMethod(){
//方法体
}
}
多态
多态是一种让对象以多种形态展现的能力,它有两种实现方式:方法重载和虚方法。
方法重载是在同一个类中定义多个同名但参数列表不同的方法,由编译器根据实参类型的不同来选择相应的方法。举个例子,假设我们在一个计算器类中定义了两个名为Add
的方法:
public class Calculator{
public int Add(int a, int b){
return a + b;
}
public float Add(float a, float b){
return a + b;
}
}
在调用Add
方法时,编译器会根据传入的参数类型选择相应的方法:
Calculator myCalc = new Calculator();
int result1 = myCalc.Add(1, 2); //调用第一个Add方法
float result2 = myCalc.Add(3.1f, 4.2f); //调用第二个Add方法
虚方法是在基类中定义的具有virtual
关键字的方法,它可以被子类覆盖重写。当使用基类指针或引用调用虚方法时,实际调用的方法是基类的或基类的某个子类的方法,具体的方法由程序运行时决定。
定义虚方法的基类如下所示:
public class MyBaseClass{
public virtual void MyMethod(){
//基类方法
}
}
定义子类并覆盖基类的虚方法如下所示:
public class MySubClass : MyBaseClass{
public override void MyMethod(){
//子类覆盖方法
}
}
示例一:银行账户类
假设我们正在编写一个银行账户管理系统,可以使用面向对象的方式定义一个银行账户类,具体实现如下:
public class BankAccount{
private string accountNumber;
private decimal balance;
public BankAccount(string accountNumber, decimal balance){
this.accountNumber = accountNumber;
this.balance = balance;
}
//存款
public void Deposit(decimal amount){
balance += amount;
}
//取款
public bool Withdraw(decimal amount){
if(balance >= amount){
balance -= amount;
return true;
}else{
return false;
}
}
//查询余额
public decimal GetBalance(){
return balance;
}
}
在Main函数中使用BankAccount类:
BankAccount myAccount = new BankAccount("123456789", 1000);
myAccount.Deposit(500); //存入500元
decimal balance = myAccount.GetBalance(); //查询余额
Console.WriteLine("我的账户余额是:" + balance);
示例二:动物类
假设我们正在编写一个动物类型分析程序,可以使用面向对象的方式定义一个基类Animal,再定义不同种类的动物类,具体实现如下:
public class Animal{
private string name;
private int age;
public Animal(string name, int age){
this.name = name;
this.age = age;
}
//吃食
public virtual void Eat(){
Console.WriteLine(name + "正在吃食...");
}
//睡觉
public virtual void Sleep(){
Console.WriteLine(name + "正在睡觉...");
}
}
public class Cat : Animal{
public Cat(string name, int age) : base(name, age){
}
//吃鱼
public override void Eat(){
Console.WriteLine(name + "正在吃鱼...");
}
}
public class Dog : Animal{
public Dog(string name, int age) : base(name, age){
}
//吃骨头
public override void Eat(){
Console.WriteLine(name + "正在吃骨头...");
}
}
在Main函数中使用Animal、Cat和Dog类:
Animal myAnimal = new Animal("动物", 3);
myAnimal.Eat(); //输出:动物正在吃食...
Cat myCat = new Cat("小猫", 1);
myCat.Eat(); //输出:小猫正在吃鱼...
Dog myDog = new Dog("小狗", 2);
myDog.Sleep(); //输出:小狗正在睡觉...
以上就是C#中面向对象相关知识的一个完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你吃透C#中面向对象的相关知识 - Python技术站