c# 第八章 多态与案例

51 接口interface

csharp 复制代码
using System.Diagnostics;

interface IFlyable
{
    void Fly();
    int MaxALtitude { get; set; }
}

class Bird :IFlyable
{
    private int maxAltitude;

    public void Fly()
    {
        Console.WriteLine("鸟在飞");
    }

    public int MaxALtitude
    {
        get { return maxAltitude; }
        set { maxAltitude = value; }
    }
}

public class Aaaa
{
    public static void Main()
    {
        IFlyable bird = new Bird();
        bird.Fly();
    }
} 

一个类可以实现多个接口

密封类 sealed与override 限制

使用sealed的类,不能被继承,可以被实例化,可以继承别的类

csharp 复制代码
using System.Diagnostics;

class BaseClass
{
    public virtual void Method()
    {
        Console.WriteLine("基类放发");
    }
}

class DerivedClass : BaseClass
{
    public sealed override void Method()
    {
        Console.WriteLine("派生类方法");
    }
} 

class FurtherDerivedClass : DerivedClass
{
    public override void Method()//错误
    {
        Console.WriteLine("进一步派生类方法");
    }
}

案例1

csharp 复制代码
using System.Diagnostics;
using System.Drawing;


namespace aaaa
{
    internal class Program
    {
        static void Main(string[] args)
        {
            IDrawable[] drawables = new IDrawable[]
            {
                new Circle("红色",10,20,5.0),
            };
        }

      
    }
}
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace aaaa
{
    internal class Circle: Shape,IDrawable,ICalculable
    {
        private double radius;

        public Circle(string color, int x,int y,double radius):base (color,x,y)
        {
            this.radius = radius;
        }

        public void Draw()
        {
            Console.WriteLine($"绘制图形:颜色={Color},半径={radius}");
        }

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

        public double GetPerimeter()
        {
            return 2 * Math.PI * radius;
        }

        public override void DisplayInfo()
        {
            base.DisplayInfo();
            Console.WriteLine($"类型:圆,半径:{radius}");
        }
    }
}
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace aaaa
{
    abstract internal class Shape
    {
        public string Color { get; set; }
        public int X { get; set; }
        public int Y { get; set; }

        public Shape (string color,int x,int y)
        {
            Color = color;
            X = x;
            Y = y;
        }

        public virtual void DisplayInfo()
        {
            Console.WriteLine($"颜色:{Color},位置:({X},{Y})");
        }
    }
}
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace aaaa
{
    internal interface ICalculable
    {
        double GetArea();
        double GetPerimeter();
    }
}
csharp 复制代码
using System;
using System.Collections.Generic;
using System.Text;

namespace aaaa
{
    internal interface IDrawable
    {
        void Draw();
    }
}
相关推荐
黄贵根27 分钟前
JavaScript实现教培行业意向登记系统
开发语言·javascript·ecmascript
zzzll11113 小时前
Claude Code离线安装方案揭秘
开发语言·php
wling03014 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
郝学胜-神的一滴4 小时前
Qt 高级编程 040:按钮悬浮弹出滑块弹窗的完整攻略
开发语言·c++·qt·软件工程·用户界面
xrandzj5 小时前
Python面向对象编程入门:类、实例、初始化与封装实践
开发语言·python
DLYSB_6 小时前
API 网关流量洪峰与突发 CC 攻击:我用 Go 写了个“现场物理防御哨兵”,把故障响应压缩到秒级
开发语言·后端·golang·报警灯
雨田言炎8 小时前
四、关于Qt项目需要知道的
开发语言·笔记·qt
猿长大人8 小时前
C# | JSON 序列化中的多态接口处理:基于 Attribute 实现精准 $type 控制
c#·json
程序喵大人9 小时前
【C++进阶】STL算法与函数对象 - 02 sort为什么需要随机访问迭代器
开发语言·c++·算法
SomeB1oody9 小时前
【RustyML入门】2.6. 线性判别分析
开发语言·后端·机器学习·rust·教程