C#003继承多态

面向对象编程基础

01:什么是继承?代码举例说明

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

        public string Name { get; set; }
    }


public class Student:Person
    {
        public void SayHi()
        {
            Console.WriteLine(this.Age+this.Name);
        }
    }

02:什么是多态?代码举例说明

public class Teacher:Person
    {
        public override void SayHi()
        {
            Console.WriteLine("我是老师" + this.Age + this.Name);
        }
    }

public class Student:Person
    {
        public override void SayHi()
        {
            Console.WriteLine("我是学生"+this.Age+this.Name);
        }
    }

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

        public string Name { get; set; }

        public virtual void SayHi()
        {
            Console.WriteLine("你好~");
        }
    }

03:什么是抽象类?代码举例说明

public abstract class Car
    {
        public abstract void Run();
    }

04:抽象类和接口的相同点和不同点?
相同点:
都不能实例化
都可以被继承
可以包含属性和方法

不同点:
接口可以多实现,而抽象方法只能单继承

05:抽象方法和虚方法的不同点和相同点?
相同点:
都可以实现多态
都可以被子类重写

不同点:
抽象方法用abstract修饰,虚方法用virtual修饰
抽象方法必须被子类重写,除非子类也是个抽象类
抽象方法只能抽象类当中定义

06:定义抽象类和抽象方法的关键字?
  使用abstract关键字

07:书本上XML那一章中有哪些方法?代码一一举例
Load()----读取整个XML结构

static void Main(string[] args)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load("test.xml");
        }

08:书本上文件那一章中有哪些方法?代码一一举例
File类常用方法:
Exists(string path)  用于检查文件是否存在
Copy(string oldPath,string newPath) 将文件拷贝到指定路径
Move(string oldPath,string newPath) 将文件移动到指定路径
Delete(string path) 删除指定路径文件

Directory类常用方法:
Exists(string path)  用于检查指定文件夹在磁盘中是否存在
Move(string oldPath,string newPath) 将文件夹或目录移动到指定路径
Delete(string path) 删除指定目录

static void Main(string[] args)
        {
            string path = "B:\\ceshi.txt";
            string newPath = "D:\\ceshi.txt";
            CopyFile(path,newPath);
            DelFile(newPath);
            MoveFile(path, newPath);
            Console.ReadKey();
        }


        public static void CopyFile(string oldPath,string newPath)
        {
            try
            {
                if (!File.Exists(oldPath))
                {
                    Console.WriteLine("文件不存在!");
                    return;
                }
                File.Copy(oldPath,newPath);
                Console.WriteLine("复制成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("复制出现异常"+ex.Message);
                throw;
            }

        }

        public static void DelFile(string path)
        {
            try
            {
                if (!File.Exists(path))
                {
                    Console.WriteLine("文件不存在!");
                    return;
                }
                File.Delete(path);
                Console.WriteLine("删除成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("删除出现异常"+ex.Message);
                throw;
            }
        }

        public static void MoveFile(string oldPath, string newPath)
        {
            try
            {
                if (!File.Exists(oldPath))
                {
                    Console.WriteLine("文件不存在!");
                    return;
                }
                File.Move(oldPath, newPath);
                Console.WriteLine("移动成功!");
            }
            catch (Exception ex)
            {
                Console.WriteLine("移动出现异常"+ex.Message);
                throw;
            }
        }

static void Main(string[] args)
        {
            string path = "B:\\";
            DirectoryInfo[] dir = FindD(path);
            Console.WriteLine("B盘目录:");
            foreach (DirectoryInfo info in dir)
            {
                Console.WriteLine(info.FullName);
            }
            Console.ReadKey();
        }


        public static DirectoryInfo[] FindD(string path)
        {
            DirectoryInfo info = new DirectoryInfo(path);
            DirectoryInfo[] dir = info.GetDirectories();
            return dir;
        }

 

课程设计报告:总体方案设计说明 一、软件开发环境配置 本系统采用C++作为核心编程语言,结合Qt 5.12.7框架进行图形用户界面开发。数据库管理系统选用MySQL,用于存储用户数据与小精灵信息。集成开发环境为Qt Creator,操作系统平台为Windows 10。 二、窗口界面架构设计 系统界面由多个功能模块构成,各模块职责明确,具体如下: 1. 起始界面模块(Widget) 作为应用程序的入口界面,提供初始导航功能。 2. 身份验证模块(Login) 负责处理用户登录与账户注册流程,实现身份认证机制。 3. 游戏主大厅模块(Lobby) 作为用户登录后的核心交互区域,集成各项功能入口。 4. 资源管理模块(BagWidget) 展示用户持有的全部小精灵资产,提供可视化资源管理界面。 5. 精灵详情模块(SpiritInfo) 呈现选定小精灵的完整属性数据与状态信息。 6. 用户名录模块(UserList) 系统内所有注册用户的基本信息列表展示界面。 7. 个人资料模块(UserInfo) 显示当前用户的详细账户资料与历史数据统计。 8. 服务器精灵选择模块(Choose) 对战准备阶段,从服务器可用精灵池中选取参战单位的专用界面。 9. 玩家精灵选择模块(Choose2) 对战准备阶段,从玩家自有精灵库中筛选参战单位的操作界面。 10. 对战演算模块(FightWidget) 实时模拟精灵对战过程,动态呈现战斗动画与状态变化。 11. 对战结算模块(ResultWidget) 对战结束后,系统生成并展示战斗结果报告与数据统计。 各模块通过统一的事件驱动机制实现数据通信与状态同步,确保系统功能的连贯性与数据一致性。界面布局遵循模块化设计原则,采用响应式视觉方案适配不同显示环境。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
<think>嗯,用户想了解C#中的封装、继承多态,需要示例和实现。首先,我得回忆一下这三个概念的定义和它们在C#中的具体应用。封装主要是隐藏内部细节,通过访问修饰符来控制,比如private、public这些。继承的话,C#用的是类继承,子类可以继承父类的属性和方法。多态比较复杂,有静态多态和动态多态,静态可能指方法重载,动态则是通过虚方法和重写实现的。 接下来,我需要考虑用户可能的实际需求。他们可能想看到具体的代码示例,这样更容易理解。比如封装的例子可以用一个类,里面有私有字段和公共属性。继承的话,可以展示一个基类和子类的关系。多态可能需要用虚方法或者接口来演示不同对象调用相同方法的不同行为。 然后,要注意引用之前提供的资料。用户给出的引用里提到多态通过虚方法、抽象类和接口实现,所以示例中应该涵盖这些方面。比如,在动态多态部分,使用虚方法和override关键字,或者用接口来展示多态性。 还要确保代码的正确性,比如在C#中,继承是用冒号,子类构造函数调用基类构造函数用base关键字。多态中的方法重写需要virtual和override配对使用。接口的实现则是用implicit方式还是显式方式,这里可能需要简单说明。 另外,用户可能需要了解这三个概念的实际应用场景,比如封装用于数据保护,继承用于代码复用,多态用于提高代码的灵活性和可扩展性。在示例中,可以提到这些优点,帮助用户理解为什么使用这些特性。 最后,生成的相关问题要覆盖常见疑惑,比如封装的安全性,继承的优缺点,多态的实现方式比较等。这样用户如果有进一步的问题,可以引导他们深入探讨。</think>### C# 封装、继承多态的实现与示例 #### 一、封装(Encapsulation) **定义**:封装通过隐藏对象内部细节并控制访问权限,实现数据安全和代码模块化。 **实现方式**:使用访问修饰符(`private`/`public`/`protected`)和属性(`get`/`set`)。 **示例**: ```csharp public class BankAccount { private decimal _balance; // 私有字段,外部无法直接访问 public decimal Balance { get { return _balance; } set { if (value >= 0) _balance = value; } } public void Deposit(decimal amount) { if (amount > 0) _balance += amount; } } ``` **特点**: - 数据验证通过`set`实现(如禁止负余额)[^2] - 方法`Deposit`封装存款逻辑 --- #### 二、继承(Inheritance) **定义**:子类继承父类属性和方法,实现代码复用和层次化设计。 **实现方式**:使用`:`符号声明继承关系。 **示例**: ```csharp public class Animal { public string Name { get; set; } public void Eat() => Console.WriteLine("Eating..."); } public class Dog : Animal { // 继承Animal类 public void Bark() => Console.WriteLine("Woof!"); } ``` **调用**: ```csharp Dog myDog = new Dog(); myDog.Eat(); // 继承自父类 myDog.Bark(); // 子类特有方法 ``` --- #### 三、多态(Polymorphism) ##### 1. 动态多态(虚方法) **实现方式**:通过`virtual`和`override`实现运行时多态[^3]。 **示例**: ```csharp public class Shape { public virtual void Draw() => Console.WriteLine("Drawing a shape"); } public class Circle : Shape { public override void Draw() => Console.WriteLine("Drawing a circle"); } ``` **调用**: ```csharp Shape shape = new Circle(); shape.Draw(); // 输出"Drawing a circle" ``` ##### 2. 接口多态 **实现方式**:通过接口定义契约,不同类实现相同接口[^3]。 **示例**: ```csharp public interface ILogger { void Log(string message); } public class FileLogger : ILogger { public void Log(string message) => Console.WriteLine($"File: {message}"); } public class DatabaseLogger : ILogger { public void Log(string message) => Console.WriteLine($"Database: {message}"); } ``` **调用**: ```csharp ILogger logger = new FileLogger(); logger.Log("Test"); // 输出"File: Test" ``` --- #### 综合应用场景 1. **封装**:保护敏感数据(如银行账户余额) 2. **继承**:构建UI控件层次(如`Button`继承自`Control`) 3. **多态**:实现插件系统(通过接口统一调用不同插件) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值