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日

相关文章

  • LINQ教程之LINQ简介

    LINQ教程之LINQ简介 什么是LINQ 随着计算机技术的飞速发展,数据量的增长以及数据作为应用程序的主要组成部分,如何高效地处理数据成为了软件开发者不可回避的挑战。微软在2007年的时候推出了一项新的技术 – Language Integrated Query,简称LINQ,通过该技术,我们可以在各种数据源(数据库、XML文档、对象集合等)上进行查询和操…

    C# 2023年6月1日
    00
  • .NET7使用HttpClient实现查询天气预报接口

    朋友做网站需要根据城市展示天气预报,找了一圈没有找到靠谱的接口,今天在中央气象台的官网查询某个城市找到了接口,先用postman试了一下居然可以使用,可以查询某个城市7天的天气预报等信息。但是查询编码是气象台自己的编码,在网上搜索了一下居然有这个编码。本文使用HttpClient方法查询这个接口。 天气接口 城市编码 HttpClient是.net core…

    C# 2023年4月19日
    00
  • ASP.NET MVC实现树形导航菜单

    以下是“ASP.NET MVC实现树形导航菜单”的完整攻略: 什么是ASP.NET MVC实现树形导航菜单 ASP.NET MVC实现树形导航菜单是一种机制,允许开发人在MVC视图页中使用递归法和HTML标记生成树形导航菜单。这种机制可以帮助开发人员更轻地处理导航菜单,并提高用户体验。 ASP.NET MVC实现树形导菜单的步骤 ASP.NET MVC实现树…

    C# 2023年5月12日
    00
  • C#数组反转与排序实例分析

    关于“C#数组反转与排序实例分析”,我们可以按照以下步骤进行分析。 1. 数组反转 数组反转是指将数组元素按相反的顺序重新排列。在 C# 中,对于数组一维对象而言,可以使用 Array 类的 Reverse() 方法实现数组元素的反转操作。下面是反转数组元素的示例代码: int[] array = {1, 2, 3, 4, 5}; // 定义一个整型数组 A…

    C# 2023年6月1日
    00
  • C#实现扫雷游戏

    C#实现扫雷游戏 简介 扫雷是一款经典的单机小游戏,其规则是在一个方形网格中挖出地雷,同时根据周围的数字来判断是否有地雷,最终将所有没有地雷的格子都展示出来。C#作为面向对象编程语言,在实现扫雷游戏时具有一定的优势,下文将为大家详细讲解如何使用C#实现扫雷游戏。 实现步骤 创建一个新的C#控制台应用程序,并在程序中定义一个二维数组存储游戏的棋盘,数组元素初始…

    C# 2023年6月1日
    00
  • VS.net VSS时,编译报错:未能向文件“.csproj.FileListAbsolute.txt”写入命令行 对路径 的访问被拒绝。

    这是一个在使用VS.netVSS时出现的编译错误,通常是由于文件权限问题引起的。出现这个错误时,VS.netVSS不能将命令行路径写入文件”.csproj.FileListAbsolute.txt”中,返回”访问被拒绝”的错误。 解决方法如下: 以管理员身份运行Visual Studio 第一个解决方法是在运行Visual Studio时使用管理员权限。右键…

    C# 2023年5月14日
    00
  • C# Clear():从 ICollection中移除所有元素

    C#Clear()方法详解 在C#中,Clear()是一个常用的方法,其函数签名为:public void Clear()。这个方法用于清除List集合中的所有元素,使其变为空集合。 具体而言,Clear()方法做两个主要方面的操作:删除所有元素,以及释放元素占用的存储空间。 下面,我们就详细介绍Clear()方法的使用。 基础用法 在 List 的对象上,…

    C# 2023年4月19日
    00
  • asp.net(c#)复数类(复数加减乘除四则运算)

    ASP.NET (C#)复数类(复数加减乘除四则运算) 简介 复数是一个由实部和虚部组成的数,实部和虚部都是实数。在科学技术领域中,复数常用于描述具有大小和相位的量,例如电位。 在ASP.NET (C#)中,我们可以定义并使用自己的复数类,实现复数的四则运算,并进行加减乘除等操作。下面将详细介绍如何编写一个复数类。 定义复数类 为了定义一个复数类,我们需要考…

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