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();
    }
}
相关推荐
努力努力再努力wz5 小时前
【Lua 入门系列】Lua 函数深入理解:函数对象、多返回值、可变参数、闭包、递归与尾调用优化
开发语言·lua
飞浪纪元[FWC–FE]6 小时前
从零到一键绿:Qt 5.14.2 + VS2019 开发环境搭建、Kit 套件配置与构建错误修复完全手册
开发语言·qt
Wang's Blog6 小时前
Java 项目实战:交友项目 - 联系人列表
java·开发语言·交友
我命由我123456 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
架构师伯子明6 小时前
FFmpeg C++学习(一):编译和demo
开发语言·c++·学习
海域云SeaArea_6 小时前
Windows Server 2008 R2 从零安装 IIS7.5(二):php.ini 配置
开发语言·windows·php
叼烟扛炮6 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
xixingzhe26 小时前
图表中同比与环比的区别:看趋势还是看变化?
开发语言·python
andyweike6 小时前
Swift
开发语言·ios·swift
纪念 2296 小时前
C++算法(六)
开发语言·c++·算法