WPF学习(1)--类与类的继承

news2024/11/17 17:46:14

在面向对象编程中,继承是一种机制,允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。继承使我们能够创建一个通用类,然后根据需要扩展或修改它以创建更具体的类。以下是一些关于父类和子类以及它们之间继承关系的基本概念和解释。

一、父类、子类及类的继承关系

1.父类(基类)

  • 父类是一个通用的类,它定义了一组属性和方法,这些属性和方法可以被多个子类共享。
  • 父类通常是较抽象的,表示一个更通用的概念。例如,Animal(动物)类可以是一个父类,表示所有动物的共同属性和行为。

2.子类(派生类)

  • 子类是从父类派生出来的类。它继承了父类的所有属性和方法,但也可以添加自己特有的属性和方法。
  • 子类表示一个更具体的概念。例如,Cat(猫)类和Dog(狗)类可以是从Animal类派生出来的子类,表示具体的动物种类。

3.继承关系

3.1 继承属性和方法

  • 子类继承父类的所有非私有属性和方法。这意味着子类可以直接使用父类中的代码。
  • 子类可以覆盖父类的方法(即方法重写),以提供特定于子类的实现。

3.2 继承的语法

  • 在C#中,使用冒号:来表示继承。

下面是一个示例:

public class Animal
{
    public string Sound { get; set; }
    public int Age { get; set; }
    public string Color { get; set; }
}

public class Cat : Animal
{
    public Cat()
    {
        Sound = "Meow";
    }
}

public class Dog : Animal
{
    public Dog()
    {
        Sound = "Woof";
    }
}

3.3 示例解释

在上面的示例中:

  • Animal类是父类,定义了三个属性:Sound(叫声)、Age(年龄)和Color(颜色)。
  • Cat类和Dog类是从Animal类继承的子类。它们各自有一个构造函数,在创建对象时设置Sound属性的默认值。

3.4 使用继承的优点

  1. 代码重用:

    • 继承允许子类重用父类中的代码,减少了代码的重复,提高了代码的可维护性。
  2. 扩展性:

    • 可以通过继承扩展现有类,而不需要修改原有的代码。这样,系统更容易扩展和维护。
  3. 多态性:

    • 继承是实现多态性的一种手段。通过继承,可以使用父类的引用来指向子类的对象,从而实现不同的行为。

二、代码实现

本次代码基于WPF代码实现观察现象

1.C#代码:MainWindow.xaml.cs

using System;
using System.ComponentModel;
using System.Windows;

namespace WpfApp
{
    // 定义动物基类
    public class Animal : INotifyPropertyChanged
    {
        private string sound; // 动物的叫声
        private int age;      // 动物的年龄
        private string color; // 动物的颜色

        // 动物的叫声属性
        public string Sound
        {
            get { return sound; }
            set
            {
                sound = value;
                OnPropertyChanged("Sound");
            }
        }

        // 动物的年龄属性
        public int Age
        {
            get { return age; }
            set
            {
                age = value;
                OnPropertyChanged("Age");
            }
        }

        // 动物的颜色属性
        public string Color
        {
            get { return color; }
            set
            {
                color = value;
                OnPropertyChanged("Color");
            }
        }

        // 实现INotifyPropertyChanged接口,用于属性改变通知
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    // 定义猫类,继承自动物类
    public class Cat : Animal
    {
        public Cat()
        {
            Sound = "Meow"; // 初始化猫的叫声
        }
    }

    // 定义狗类,继承自动物类
    public class Dog : Animal
    {
        public Dog()
        {
            Sound = "Woof"; // 初始化狗的叫声
        }
    }

    // 定义羊类,继承自动物类
    public class Sheep : Animal
    {
        public Sheep()
        {
            Sound = "Baa"; // 初始化羊的叫声
        }
    }

    // WPF窗口的后台代码
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            // 创建动物对象,并设置它们的属性
            Animal cat = new Cat { Age = 3, Color = "Gray" };
            Animal dog = new Dog { Age = 5, Color = "Brown" };
            Animal sheep = new Sheep { Age = 2, Color = "White" };

            // 将动物对象绑定到WPF窗口的DataContext
            DataContext = new { Cat = cat, Dog = dog, Sheep = sheep };
        }
    }
}

2.XAML代码:MainWindow.xaml

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Animals" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <!-- 定义三个行,每个行用于显示一种动物的信息 -->
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>

        <!-- 猫的边框 -->
        <Border Grid.Row="0" BorderBrush="Black" BorderThickness="1" Margin="5">
            <StackPanel>
                <!-- 显示动物种类名称 -->
                <TextBlock Text="Cat" FontWeight="Bold" HorizontalAlignment="Center"/>
                <!-- 绑定并显示猫的叫声 -->
                <TextBlock Text="{Binding Cat.Sound}" />
                <!-- 绑定并显示猫的年龄 -->
                <TextBlock Text="{Binding Cat.Age}" />
                <!-- 绑定并显示猫的颜色 -->
                <TextBlock Text="{Binding Cat.Color}" />
            </StackPanel>
        </Border>

        <!-- 狗的边框 -->
        <Border Grid.Row="1" BorderBrush="Black" BorderThickness="1" Margin="5">
            <StackPanel>
                <!-- 显示动物种类名称 -->
                <TextBlock Text="Dog" FontWeight="Bold" HorizontalAlignment="Center"/>
                <!-- 绑定并显示狗的叫声 -->
                <TextBlock Text="{Binding Dog.Sound}" />
                <!-- 绑定并显示狗的年龄 -->
                <TextBlock Text="{Binding Dog.Age}" />
                <!-- 绑定并显示狗的颜色 -->
                <TextBlock Text="{Binding Dog.Color}" />
            </StackPanel>
        </Border>

        <!-- 羊的边框 -->
        <Border Grid.Row="2" BorderBrush="Black" BorderThickness="1" Margin="5">
            <StackPanel>
                <!-- 显示动物种类名称 -->
                <TextBlock Text="Sheep" FontWeight="Bold" HorizontalAlignment="Center"/>
                <!-- 绑定并显示羊的叫声 -->
                <TextBlock Text="{Binding Sheep.Sound}" />
                <!-- 绑定并显示羊的年龄 -->
                <TextBlock Text="{Binding Sheep.Age}" />
                <!-- 绑定并显示羊的颜色 -->
                <TextBlock Text="{Binding Sheep.Color}" />
            </StackPanel>
        </Border>
    </Grid>
</Window>

3.代码解释

  1. C#代码:

    • Animal 类是一个基类,定义了三个属性:Sound(叫声)、Age(年龄)、Color(颜色)。这些属性通过INotifyPropertyChanged接口来通知属性变化。
    • CatDogSheep 类是从 Animal 类继承的子类。它们在构造函数中设置了各自的默认叫声。
    • MainWindow 类是WPF窗口的后台代码。在构造函数中,创建了 CatDogSheep 对象,并设置它们的属性。然后,将这些对象绑定到窗口的 DataContext
  2. XAML代码:

    • 定义了一个 Grid 布局,其中包含三个行,每行用于显示一种动物的信息。
    • 每种动物的信息显示在一个 Border 中, Border 内部是一个 StackPanel
    • StackPanel 包含一个显示动物种类名称的 TextBlock 和三个绑定到动物属性的 TextBlock
    • 通过绑定 (Binding),TextBlock 显示来自 DataContextCatDogSheep 对象的属性值。

通过这种方式,程序展示了动物的基本信息,并且每种动物的信息在单独的边框中显示,边框上方显示动物的种类名称。这种结构化的布局使得信息清晰易读。

4.现象显示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于pip的15个使用小技巧

认识pip 众所周知&#xff0c;pip可以对python的第三方库进行安装、更新、卸载等操作&#xff0c;十分方便。 pip的全称&#xff1a;package installer for python&#xff0c;也就是Python包管理工具。 可能有些人用了很久pip&#xff0c;但还不清楚包管理工具是个啥。 我…

气膜建筑一平多少钱—轻空间

气膜建筑是一种以膜材为主要结构材料&#xff0c;通过空气压力支撑的建筑形式。它广泛应用于体育场馆、展览馆、仓库及临时活动场所等多种领域&#xff0c;具有快速搭建、灵活使用、节能环保等诸多优势。 气膜建筑的成本构成 气膜建筑的成本主要由以下几个部分构成&#xff1a;…

爬虫相关面试题

一&#xff0c;如何抓取一个网站&#xff1f; 1&#xff0c;去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据&#xff0c;写代码测试调查好不好拿&#xff0c;如果好拿直接开始爬取 3&#xff0c;看看有没有电脑能打开的手机网页&a…

新加坡裸机云多IP服务器为何适合跨境外贸业务

新加坡裸机云多IP服务器在跨境外贸业务中展现出了卓越的适配性&#xff0c;其独特优势为外贸企业提供了强大的支持。以下将详细阐述为何新加坡裸机云多IP服务器是跨境外贸业务的理想选择。 首先&#xff0c;新加坡裸机云多IP服务器在性能上表现出色。由于去除了虚拟化层的开销&…

2024端午节活动回顾,传承经典文化,共铸企业精神之魂!

端午佳节来临&#xff0c;为了弘扬中华民族优秀的传统文化&#xff0c;国际数字影像产业园开展了“端午粽动员&#xff0c;尽情放粽”端午节主题活动&#xff0c;把节日的祝福送到了全体职工的身边。 此次端午节活动时间为上午9点半至下午1点&#xff0c;活动地点设置在国际数…

19.1 HTTP客户端-HTTP协议、GET请求、POST请求

1. HTTP协议 TCP/IP协议栈由上至下分为以下四层&#xff1a; 应用层&#xff1a;为用户提供应用服务时的通信活动 DNS、FTP&#xff08;文件传输&#xff09;、HTTP&#xff08;超文本传输&#xff09;传输层&#xff1a;网络中两台计算机之间的数据传输 TCP、UDP、SPX网络层…

百问网全志V853开发板烧录开发板系统教程

烧录开发板系统 注意&#xff1a;此方式烧录进的文件系统是ubifs文件系统&#xff0c;如果操作 需要网络文件系统挂载或者使用TF卡&#xff0c;不推荐使用。 准备工作 1.100ASK-V853-Pro开发板 x1 2. 下载全志线刷工具AllwinnertechPhoeniSuit 3. TypeC线 X2、12V电源线X1 4…

怎么恢复电脑删除的文件?4个策略恢复数据!

“不知道大家有什么方法可以恢复电脑上删除的文件吗&#xff1f;一不小心删除了部分文件&#xff0c;希望能得到大家的帮助。” 我们的电脑里会存储着很多重要的数据&#xff0c;包括各种重要的文件、照片、资料等。在使用电脑时&#xff0c;有时候可能会由于各种误操作导致它们…

PostgreSQL 多表连接不同维度聚合统计查询

摘要:在本文中,你将学习到如何使用 PostgreSQL 完全外连接,从两个或多个表中聚合维度统计数据。 文章目录 一、常用的连接类型图示二、数据库表设计示例三、连接查询示例1. inner join 内连接(不能满足维度统计需求)2. full join 完全外连接(满足维度统计需求)一、常用的…

环保空调的制冷量和耗电量是多少呢

环保空调的制冷量和耗电量因具体型号、功率以及使用情况而异。以下是一些关于环保空调制冷量和耗电量的详细解释和归纳&#xff1a; 制冷量 原理&#xff1a;环保空调主要利用水蒸发吸热的物理原理进行降温&#xff0c;这种降温方式能够带来显著的冷却效果。效果&#xff1a;…

【NLP】给Transformer降降秩,通过分层选择性降阶提高语言模型的推理能力

【NLP】给Transformer降降秩&#xff0c;通过分层选择性降阶提高语言模型的推理能力 文章目录 【自然语言处理-论文翻译与学习】序1、导论2、相关工作3、相关工具4、方案5、实验5.1 使用 GPT-J 对 CounterFact 数据集进行彻底分析5.1.1 数据集中的哪些事实是通过降阶恢复的&…

C++ 引用 - 引用的特点|在优化程序上的作用

引用是C 的一个别名机制&#xff0c;所谓别名&#xff0c;就是同一块内存共用多个名字&#xff0c;每个名字都指的是这片空间&#xff0c;通过这些别名都能访问到同样的一块空间。 就像鲁迅和周树人是同一个人。 ——鲁迅 一、引用的基本用法 int a 10; int& ref a; // …

磁盘管理 磁盘介绍 MBR

track&#xff1a;磁道&#xff0c;就是磁盘上同心圆&#xff0c;从外向里&#xff0c;依次1号、2号磁道..... sector&#xff1a;扇区&#xff0c;将磁盘分成一个一个扇形区域&#xff0c;每个扇区大小是512字节&#xff0c;从外向里&#xff0c;依次是1号扇区、2号扇区... cy…

LLVM Cpu0 新后端 系列课程总结

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

基于springboot实现问卷调查系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现问卷调查系统演示 摘要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;问卷信息因为其管理内容繁杂&#xff0c;管理数…

【全开源】Java AI绘画MJ绘画源码小程序APP公众号源码AI绘图

&#x1f3a8; 探索AI绘画的奥秘 一、引言&#xff1a;AI绘画的魅力 &#x1f308; 在这个数字化飞速发展的时代&#xff0c;AI绘画已经不再是遥不可及的梦想。通过源码小程序&#xff0c;我们可以轻松探索AI绘画的奥秘&#xff0c;感受科技与艺术的完美结合。今天&#xff0…

ubuntu18.04 配置 mid360并测试fast_lio

1.在买到Mid360之后&#xff0c;我们可以看到mid360延伸出来了三组线。 第一组线是电源线&#xff0c;包含了红色线正极&#xff0c;和黑色线负极。一般可以用来接9-27v的电源&#xff0c;推荐接12v的电源转换器&#xff0c;或者接14.4v的电源转换器。 第二组线是信号线&#x…

组件之间的通信方式

【 0 】前言 Vue 是一个渐进式的 JavaScript 框架&#xff0c;通过组件化的方式构建应用。在 Vue 中&#xff0c;组件通信指的是不同组件之间传递数据、共享数据或调用方法等行为。在前端开发中&#xff0c;子组件和父组件之间的通信是非常常见和重要的。 【 1 】父子组件通信…

SMT智能车间MES系统的实施方案

SMT行业中MES系统实施的关键特征&#xff1a; SMT包括上下板设备&#xff0c;印刷设备&#xff0c;贴片设备&#xff0c;回流焊炉&#xff0c;AOI。AOI的全称是自动光学检查&#xff0c;它基于光学原理来检测焊接生产中遇到的常见缺陷。测试设备&#xff0c;测试设备等MES解决…

如何用多媒体沙盘实现智能交互体验?

随着多媒体技术在内容展示领域的迅猛进步&#xff0c;智能化信息交互方式已然跃升为公众瞩目的焦点&#xff0c;而展厅作为信息传递与产品展示的核心阵地&#xff0c;正面临着提升交互体验、强化信息传递效果的迫切需求。因此&#xff0c;以多媒体沙盘、LED屏幕等创新装置为媒介…