首页 > 编程语言 >C# 面向对象编程的三大支柱:封装、继承与多态

C# 面向对象编程的三大支柱:封装、继承与多态

时间:2024-09-18 16:46:45浏览次数:11  
标签:Console WriteLine C# void 多态 public 面向对象编程 class

面向对象编程(OOP)是一种广泛使用的编程范式,它通过封装、继承和多态这三大支柱来构建灵活且可维护的代码结构。本文将详细介绍这三大支柱在C#语言中的应用,并通过示例代码展示它们的具体实现。

一、封装(Encapsulation)

封装是指将对象的属性(字段)和行为(方法)结合在一起,并对外部隐藏对象的具体实现细节,仅暴露必要的接口供外部使用。封装提高了代码的安全性和可维护性。

示例代码

using System;

namespace EncapsulationExample
{
    class Person
    {
        // 私有字段
        private string name;
        private int age;

        // 公共属性,通过get和set访问器控制字段的访问
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set
            {
                // 添加逻辑校验,例如年龄应为非负数
                if (value >= 0)
                    age = value;
                else
                    throw new ArgumentException("Age must be non-negative.");
            }
        }

        // 方法
        public void DisplayInfo()
        {
            Console.WriteLine($"Name: {name}, Age: {age}");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Person person = new Person();
            person.Name = "Alice";
            person.Age = 30;
            person.DisplayInfo();

            // 尝试设置非法年龄会抛出异常
            try
            {
                person.Age = -5;
            }
            catch (ArgumentException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

二、继承(Inheritance)

继承允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用和扩展。子类可以新增或重写父类的方法,但必须遵守父类定义的接口契约。

示例代码

using System;

namespace InheritanceExample
{
    // 父类
    class Animal
    {
        public void Eat()
        {
            Console.WriteLine("Eating...");
        }
    }

    // 子类
    class Dog : Animal
    {
        // 新增方法
        public void Bark()
        {
            Console.WriteLine("Barking...");
        }

        // 重写父类方法
        public new void Eat()
        {
            Console.WriteLine("Dog is eating specific food...");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();
            dog.Eat();  // 调用子类的方法
            dog.Bark();
        }
    }
}

三、多态(Polymorphism)

多态是指允许使用对象的某个基类引用来指向其任何派生类的对象,并通过这个基类引用调用派生类中重写的方法。多态性使得代码更加灵活和可扩展。

示例代码

using System;

namespace PolymorphismExample
{
    // 抽象父类
    abstract class Shape
    {
        // 抽象方法
        public abstract double GetArea();
    }

    // 子类:圆形
    class Circle : Shape
    {
        public double Radius { get; set; }

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

    // 子类:矩形
    class Rectangle : Shape
    {
        public double Width { get; set; }
        public double Height { get; set; }

        public override double GetArea()
        {
            return Width * Height;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 多态性:使用基类引用来指向派生类对象
            Shape circle = new Circle { Radius = 5 };
            Shape rectangle = new Rectangle { Width = 4, Height = 6 };

            Console.WriteLine($"Circle Area: {circle.GetArea()}");
            Console.WriteLine($"Rectangle Area: {rectangle.GetArea()}");
        }
    }
}

总结

封装、继承和多态是面向对象编程的三大基本支柱,它们在C#中得到了充分的支持。通过封装,我们可以保护对象的内部状态;通过继承,我们可以重用和扩展现有的代码;通过多态,我们可以编写更加灵活和可扩展的代码。理解和掌握这三大支柱,对于编写高质量的C#程序至关重要。希望本文的示例代码能够帮助读者更好地理解和应用这些概念。

标签:Console,WriteLine,C#,void,多态,public,面向对象编程,class
From: https://www.cnblogs.com/lyl6796910/p/18418833

相关文章

  • 使用call、apply和bind改变函数执行时的上下文
    使用call、apply和bind都能够是函数的上下文发生改变,那我们来具体看看这记者之间的区别吧。call方法:语法:call([thisObj[,arg1[,arg2[,  [,.argN]]]]])定义:调用一个对象的一个方法,以另一个对象替换当前对象。说明:call方法可以用来代替另一个对象调用一个方法。call方法......
  • The 2022 ICPC Asia Xian Regional Contest
    目录写在前面F签到J签到C贪心,模拟G字符串,哈希L贪心,结论E数学,模拟B结论,网络流ALCTor根号预处理or线段树分治维护连通性D倍增,DP写在最后写在前面比赛地址:https://codeforces.com/gym/104077。以下按个人向难度排序。vp8题900+罚时差100罚时金。唉唉现在题数......
  • 我在使用C语言编程的时候可以完全了解内存中数据的情况,每一个字节每一个比特都能了如
    在Rust中,虽然编译器默认会帮助你管理内存,提供安全的抽象,但你仍然可以像在C语言中一样,完全掌控每个字节、每个位的操作。Rust提供了多种方式来实现对内存的精细控制,只是默认情况下这些操作受到更多的安全检查和限制。以下是一些方法,帮助你在Rust中实现对内存的精确控制:1.......
  • 菜鸟笔记之PWN入门(1.1.2)C程序调用过程与函数栈变化(32位 vs 64位)(Intel)
    本文使用Intel的32位为例子进行举例。64位本质上和32位类似,主要区别在于函数参数的调用方式,文章结尾会简要提及。重新回顾一下栈pop和push指令//将0x50的压入栈push0x50//将esp指向的数据放入指定的寄存器中pop寄存器名字比如:popeax执行之后eax的值就变成了0x50......
  • AGC015D题解
    简要题意给定一个区间\([l,r]\),从中选出若干整数按位或,求可能出现的数的方案数。数据范围:\(1\lel\ler\le2^{60}\)。思路首先对于\([l,r]\)里的数全都满足条件,然后因为是按位或,所以\(l,r\)二进制下的一段前缀就与答案无关可以先去掉。现在我们只需要考虑比\(r\)还要......
  • carplay认证流程及有效期
    CarPlay认证是一项由苹果公司主导的认证程序。其主要目的是确保车辆信息娱乐系统(如车载导航系统、娱乐系统等)能够与CarPlay功能无缝集成,提供稳定、可靠的用户体验。 carplay认证的重要性:1.确保兼容性和稳定性:CarPlay认证确保车辆信息娱乐系统与CarPlay功能能够无缝兼容,提供稳定可......
  • P4185 [USACO18JAN] MooTube G 题解
    水一篇题解。也是一道并查集的好题,涉及另一个并查集的基本应用,并查集维护连通块(我跟并查集过不去了???)大致题意:给你一棵树,对于每次询问求一个点所在连通块中到达该点的最小路径权值大于给定值的点个数。既然都连通块了,那我们在维护连通块的时候直接不把权值大于K的边加进去,用并查......
  • CarPlay ITU认证
    CarPlayITU认证是一个专注于车载娱乐系统在语音通信方面性能的测试过程。这一认证主要基于国际电信联盟(ITU)制定的标准,特别是ITU-TP.1100、P.1110和P.1120等规范,以确保车载娱乐系统在各种情况下的性能和兼容性。以下是关于CarPlayITU认证的详细解析:CarPlayITU认证的重要性:CarPla......
  • C++14的一些新特性
    记录一些C++14的一些特性: 函数返回值类型推导:C++14对函数返回类型推导规则做了优化:#include<iostream>usingnamespacestd;autofunc(inti){returni;}intmain(){cout<<func(4)<<endl;return0;}返回值类型推导也可以用在模板中:#include......
  • 北大&港中文&腾讯提出ViewCrafter:一张图像就可以制作影视特效和游戏画面!
    北大和港中文联合腾讯人工智能实验室提出了ViewCrafter,这是一种利用视频扩散模型的先验从单个或稀疏图像合成一般场景的高保真新视图的新方法。可以简单理解为将复杂的图像转换成新角度的图像版本。首先,它会使用特殊的算法来读取一张或几张图像,创建一个三维的"模型",这就像是把镜头......