C# 面向对象特性
面向对象编程的三大基本特性是:封装、继承和多态。下面将详细介绍这三大特性在C#中的体现方式。
封装
定义:把对象的数据和操作代码组合在同一个结构中,这就是对象的封装性。
体现方式:
-
使用访问修饰符控制成员的可见性
-
通过属性(Property)封装字段
-
使用方法封装实现细节
访问修饰符
关键字 | 范围 | 描述 |
public | 公共成员 | 无限制访问 |
protected | 保护成员 | 当前类及其派生类 |
private | 私有成员 | 当前类内部成员访问 |
internal | 内部成员 | 仅在当前程序集访问 |
protected internal | 保护内部成员 | 仅限于当前程序集或该类的派生类访问 |
属性
//1.全写
private string name;
public string Name
{get { return name; }set { name = value; }
}//2.全简写
public int Age { get; set; }//3.半简写
private string address;
public string Address => address; //等价于 public int Age { get { return age; } }//4.只读,不可写入
public float Money { get; }
public float PrivateMoney { get; private set; }//5.get set有代码的简写
//属性的用途之一:此处体现了属性的好处,用get给属性赋初值,set赋值可省去一个SetIntroduction()方法,使代码更简洁
private string introduction;
public string Introduction
{get => string.Format($"{introduction}My name is {name}, I am {Age} years old");set => introduction = string.Format($"Hello {value}, ");
}//等价于
//public string Introduction
//{
// get
// {
// return string.Format($"{introduction}My name is {name}, I am {Age} years old");
// }
// set
// {
// introduction = string.Format($"Hello {value}, ");
// }//}
继承
体现方式:
-
使用
:
符号实现类继承,派生类继承基类的成员 -
可以使用
sealed
关键字阻止进一步继承 -
支持单继承(类只能继承一个基类),但能继承多个接口
继承基类
// 基类
public class Animal
{public string Name { get; set; }public virtual void MakeSound(){Console.WriteLine("Animal makes a sound");}
}// 派生类
public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("Bark bark!");}public void Fetch(){Console.WriteLine("Fetching the ball");}
}// 使用
Animal myDog = new Dog();
myDog.MakeSound(); // 输出: Bark bark!
多态
体现方式:
-
方法重写(
override
)和虚方法(virtual
) -
抽象类(
abstract
)和抽象方法 -
接口(
interface
)实现 -
方法重载(
overload
)
方法重载
定义:在同一个类中定义了相同名称的多个方法成员的能力。唯一的区别是它们具有不同的签名(即具有不同的参数类型或不同的参数个数)。
注意:
1、返回类型不是方法签名的一部分:当两个方法只有返回类型不同时,不能算作方法重载。
2、形参名称也不是方法签名的一部分:当两个方法只有形参名称不同时,不能算作方法重载。
方法重写
在派生类中通过重写虚方法、实现抽象方法、实现接口成员来实现多态。
重写虚方法
public class Animal{public virtual void Speak(){Console.WriteLine("Hello World!");}}public class Dog : Animal{public override void Speak(){Console.WriteLine("汪汪汪");}}
实现抽象方法
1、抽象方法必须声明抽象类中
2、抽象类的派生类必须重写基类抽象方法
3、抽象类中可以包含非抽象方法,但非抽象类不能包含抽象方法
4、抽象成员不能是私有的、抽象类不能实例
public abstract class Animal
{public abstract void Speak();}public class Dog : Animal
{public override void Speak(){Console.WriteLine("汪汪汪");}
}
实现接口成员
public interface Animal
{public void Speak();}public class Dog : Animal
{public void Speak(){Console.WriteLine("汪汪汪");}
}
总结
C#中面向对象的三大特性通过以下方式体现:
-
封装:通过访问修饰符、属性和方法实现数据隐藏和保护
-
继承:通过类继承机制实现代码复用和层次关系
-
多态:通过虚方法、抽象类、接口和方法重载实现同一操作作用于不同对象时产生不同行为
这三大特性共同构成了面向对象编程的基础,使代码更易于维护、扩展和重用。