C# 面向对象三大特性:封装、继承、多态

C# 面向对象三大特性是封装、继承和多态。这三个特性是面向对象编程最基本、最重要的概念。在本篇攻略中,我们将详细讲解它们的含义,以及如何在C#中使用它们。

封装

封装是指将对象的属性和方法封装在一起,形成一个类。类可以通过统一的接口来控制属性和方法的访问。在C#中,可以通过属性和方法的访问修饰符来实现封装。

属性封装示例:

class Person
{
    private string name;

    public string Name 
    {
        get { return name; } 
        set { name = value; }
    }
}

Person p = new Person();
p.Name = "张三";  // 调用set方法对属性进行赋值
string name = p.Name; // 调用get方法获取属性值

以上示例中,Person类的name字段被封装在了Name属性中。外部不能直接访问name字段,必须通过Name属性来访问。 set方法用于为属性赋值,get方法用于获取属性的值。

方法封装示例:

class Person
{
    private string name;

    public void SetName(string name)
    {
        this.name = name;
    }

    public string GetName()
    {
        return name;
    }
}

Person p = new Person();
p.SetName("张三"); // 调用SetName方法为name字段赋值
string name = p.GetName(); // 调用GetName方法获取name的值

以上示例中,Person类的name字段被封装在SetName和GetName方法中。外部不能直接访问name字段,必须通过调用SetName和GetName方法来访问。 SetName方法用于为name字段赋值,GetName方法用于获取name的值。

继承

继承是指从已有的类中继承出新的类,新的类拥有原始类的全部特性,并且可以在此基础上添加新的属性和方法。继承允许我们在不破坏原有系统的基础上,扩展原有系统的功能。

以下是继承的示例:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Employee : Person
{
    public double Salary { get; set; }
}

Employee emp = new Employee();
emp.Name = "张三";
emp.Age = 24;
emp.Salary = 5000;

以上示例中,Employee类继承自Person类,拥有Name和Age属性。此外,Employee类还有一个自己的Salary属性。

多态

多态是指一个对象可以有多种不同的类型。在C#中,多态可以实现为函数重载、虚函数和抽象类。

以下是多态的示例:

函数重载多态示例:

class Math
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

Math math = new Math();
int result1 = math.Add(2, 3);  // 调用int类型的Add方法
double result2 = math.Add(2.1, 3.2); // 调用double类型的Add方法

以上示例中,Math类中定义了两个Add方法,一个参数类型为int,另一个参数类型为double,实现了函数重载,可以根据传入参数类型的不同自动调用不同的方法。

虚函数多态示例:

class Animal
{
    public virtual void SayHello()
    {
        Console.WriteLine("我是一只动物");
    }
}

class Cat : Animal
{
    public override void SayHello()
    {
        Console.WriteLine("我是一只猫咪");
    }
}

class Dog : Animal
{
    public override void SayHello()
    {
        Console.WriteLine("我是一只狗狗");
    }
}

Animal animal1 = new Animal();
Animal animal2 = new Cat();
Animal animal3 = new Dog();
animal1.SayHello(); // 输出:“我是一只动物”
animal2.SayHello(); // 输出:“我是一只猫咪”
animal3.SayHello(); // 输出:“我是一只狗狗”

以上示例中,Animal类中定义了一个虚函数SayHello,Cat和Dog类继承自Animal类并重写了SayHello函数。通过动态绑定,可以在运行时自动调用正确的虚函数。

抽象类多态示例:

abstract class Shape
{
    public abstract double GetArea();
}

class Rectangle : Shape
{
    private double length;
    private double width;

    public Rectangle(double length, double width)
    {
        this.length = length;
        this.width = width;
    }

    public override double GetArea()
    {
        return length * width;
    }
}

class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public override double GetArea()
    {
        return Math.PI * radius * radius;
    }
}

Shape shape1 = new Rectangle(10, 20);
Shape shape2 = new Circle(5);
double area1 = shape1.GetArea(); // 返回200
double area2 = shape2.GetArea(); // 返回78.53981633974483

以上示例中,Shape类是一个抽象类,其中定义了一个抽象函数GetArea,Rectangle和Circle类继承自Shape类并重写了GetArea函数。通过引用Shape类,可以在运行时自动调用正确的GetArea函数。

总结

本篇攻略介绍了C#中的三大面向对象特性:封装、继承、多态,并通过相关的示例详细讲解了它们的含义以及应用。熟练掌握这三大特性对于编写高质量的C#代码非常重要,希望本篇攻略能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# 面向对象三大特性:封装、继承、多态 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C#给图片加水印的简单实现方法

    下面给您详细讲解“C#给图片加水印的简单实现方法”的完整攻略。 1.安装必要的开发环境 为了进行本文的演示,我们需要安装Visual Studio开发环境、.NET框架和C#语言工具。 2.新建C#控制台应用程序项目 打开Visual Studio,点击菜单栏的“文件”-“新建”-“项目”,在弹出的对话框中选择“控制台应用程序”项目,起一个项目名称并确定,然…

    C# 2023年6月7日
    00
  • unity通过Mesh网格绘制图形球体

    下面是Unity通过Mesh网格绘制图形球体的完整攻略: 准备工作 首先,在开始绘制球体之前,我们需要先做一些准备工作。 在Unity的场景中创建一个空物体。 给该空物体添加MeshFilter和MeshRenderer组件(如果没有的话),以便我们可以在场景中看到球体。 创建一个新的C#脚本,并将其命名为“MeshCreator”(我们需要用它来实现网格绘…

    C# 2023年6月3日
    00
  • 深入理解C#序列化与反序列化的详解

    深入理解C#序列化与反序列化的详解 本文将详细介绍C#中的序列化和反序列化概念、原理和常见用法,帮助读者全面了解这一重要的语言特性。 什么是序列化和反序列化? 序列化(Serialization)是指将对象转换成二进制流(byte array),以便能够在网络上传输、存储到文件或数据库等场合使用。反序列化(Deserialization)则是将二进制流还原为…

    C# 2023年6月7日
    00
  • .Net Core解决WebAPI中返回时间格式带T的问题

    在本攻略中,我们将详细讲解如何在ASP.NET Core WebAPI中解决返回时间格式带T的问题,并提供两个示例说明。 步骤一:配置Json序列化选项 在ASP.NET Core WebAPI中解决返回时间格式带T的问题,您需要配置Json序列化选项。以下是一个示例: services.AddControllers() .AddJsonOptions(op…

    C# 2023年5月17日
    00
  • ASP.NET MVC实现区域或城市选择

    当我们需要实现区域或城市选择的功能时,可以使用 ASP.NET MVC 框架来实现。下面是详细的攻略: 步骤1:创建数据库 在 SQL Server 中创建一个名为“City”的数据库,并添加以下表: Province 表 列名 数据类型 Id int Name nvarchar(50) City 表 列名 数据类型 Id int Name nvarchar…

    C# 2023年5月12日
    00
  • C#生成putty格式的ppk文件

    生成putty格式的ppk文件需要经过以下几个步骤: 生成SSH密钥对 首先需要在本地生成SSH密钥对,可以使用OpenSSH或PuTTY生成器工具。以下是使用OpenSSH生成SSH密钥对的步骤: 打开终端或命令行窗口。 在命令行中输入以下命令生成SSH密钥对: ssh-keygen -t RSA -b 2048 根据提示输入密钥名称、密码等相关信息,并确…

    C# 2023年6月7日
    00
  • C#实现系统托盘通知的方法

    C#实现系统托盘通知的方法 在Windows应用程序中,系统托盘是一个很重要的交互方式,在不影响用户正常工作的情况下,可以及时方便的向用户提供各种需要处理和展示的数据。C#提供了丰富的API,帮助我们实现系统托盘通知,本文将介绍两种常见的实现方法。 方法一:使用NotifyIcon类实现 NotifyIcon类为我们提供了丰富的事件和属性,使得我们的系统托盘…

    C# 2023年6月7日
    00
  • C#线程同步的三类情景分析

    C#线程同步的三类情景分析 在多线程的应用中,为了确保数据的正确性,我们需要对线程进行同步,避免多个线程同时对同一份数据进行修改。C#中提供了多种同步机制,其中包括线程同步的三类情景:Mutex、Monitor和AutoResetEvent。 Mutex Mutex是由操作系统提供的同步原语,可以保证只有一个线程访问临界区。典型的使用方式如下: using …

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部