当前位置: 首页 > news >正文

八、C#笔记

/// <summary>
/// 第十三章:创建接口和定义抽象类  
/// </summary>
namespace Chapter13
{
    class Program
    {
        static void Main(string[] args)
        {
            //13.1理解接口
            ///13.1.1定义接口
            ///13.1.2实现接口
            /*
             * 实现接口时必须保证每个方法都完全匹配对应的接口方法,具体遵循以下几个规则:
             * 1.方法名和返回类型完全匹配
             * 2.所有参数(包括ref和out关键字修饰符)都完全匹配
             * 3.用于实现接口的所有方法都必须具有public可访问性。但如果使用显示接口实现(即实现时附加接口名前缀),
             * 则不应该为方法添加访问修饰符。
             */
            ///13.1.3通过接口引用类
            Hourse hourse = new Hourse();
            if (hourse is ICloneable)
            {
                //ICloneable cloneable = hourse;
            }
            ///13.1.4使用多个接口
            //class Hores:Mammal,ILandBound,IGrazable
            ///13.1.5显示实现接口(类里面实现的接口,用接口.方法名)
            ///13.1.6用接口进行版本控制
            /*
             * 创建一个接口去继承另一个接口(但是难以维护)
             * 如果在写好接口、接口具体方法后,还想加入新的接口。
             * 就写接口的方法抛出异常
             */
            ///13.1.7接口的限制
            /*
             * 不能在接口中定义任何字段,包括静态字段.
             * 不能在接口中定义任何构造器
             * 不能在接口中定义任何终结器
             * 不能为任何方法指定访问修饰符\接口所有方法都隐式为公共方法
             * 不能在接口中嵌套任何类型(例如枚举\结构\类或其他接口)
             * 虽然一个接口能从另一个接口继承,但不允许从结构\记录或类继承.
             */
             ///13.1.8定义和使用接口
             ///略,不演示
             
            //13.2抽象类
            /*
             * 为明确声明不允许创建某个类的实例,必须将那个类显式声明为抽象类
             * 抽象类可包含抽象方法.
             * 抽象方法原则上与虚方法相似,只是不含方法主体
             * 派生类必须 重写这种方法.
             */

            //13.3密封类
            /*
             * 如果不想一个类作为基类使用,可用C#提供的sealed密封关键字防止类被用作基类使用
             */
             ///13.3.1密封方法
             /*
              * 理解关键字:
              * interface(接口)引入方法的名称
              * virtual(虚)方法是方法的第一个实现
              * override(重写)方法是方法的另一个实现
              * sealed(密封)是方法的最后一个实现
              */
              ///13.3.2实现并使用抽象类
              
        }
    }
}


namespace Chapter13
{
    class Hourse : IComparable
    {
        public int CompareTo(object obj)
        {
            return 4;
        }
    }
}
 

namespace Chapter13.Interface
{
    internal class SolidColorBrush
    {
        private Color color;

        public SolidColorBrush(Color color)
        {
            this.color = color;
        }
    }
}

namespace Chapter13.Interface
{
    internal class Shape
    {
        public SolidColorBrush Fill { get; internal set; }
    }
}

namespace Chapter13.Interface
{
    public interface IComparable
    {
        int CompareTo(object obj);
        /// <summary>
        /// 13.1.6用接口进行版本控制(c#8.0开始)
        /// </summary>
        /// <returns></returns>
        // void DoAdditionalWork()
        //{
        //    throw new NotImplementedException();
        //}
    }
}
 


namespace Chapter13.Interface
{
    /// <summary>
    /// 13.3.2实现并使用抽象类
    /// </summary>
    abstract class DrawingShape
    {
        protected int size;
        protected int locX=0,locY=0;
        protected Shape shape=null;
        public DrawingShape(int size)
        {
            this.size = size;
        }
        public void  SetLocation(int xCoord, int yCoord)
        {
            this.locX = xCoord;
            this.locY = yCoord;
        }
        public void SetColor(Color color)
        {
            if(this.shape is null){

            }
            else
            {
                SolidColorBrush brush = new SolidColorBrush(color);
                this.shape.Fill = brush;
            }
        }
    }
}
 

namespace Chapter13.Interface
{
    public class Color
    {
    }
}

http://www.lryc.cn/news/256880.html

相关文章:

  • 利用Node.js和cpolar实现远程访问,无需公网IP和路由器设置的完美解决方案
  • C++如何通过调用ffmpeg接口对H264文件进行编码和解码
  • 使用MetaMask + Ganache搭建本地私有网络并实现合约部署与互动
  • 目标检测、目标跟踪、重识别
  • 高防IP防御效果怎么样,和VPN有区别吗
  • 探秘MSSQL存储过程:功能、用法及实战案例
  • 我们常说的流应用到底是什么?
  • ELK 日志解决方案
  • 本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ
  • freeswitch webrtc video_demo客户端进行MCU的视频会议
  • 【鸿蒙学习网络】
  • MySQL系列(一):索引篇
  • Flink Flink数据写入Kafka
  • 《论文阅读》用于情绪回复生成的情绪正则化条件变分自动编码器 Affective Computing 2021
  • Pytorch CIFAR10图像分类 Swin Transformer篇
  • 【vim】常用操作
  • oracle、误操作删除数据库 数据恢复。
  • 【Angular开发】Angular在2023年之前不是很好
  • 记录 | 报错:libssl-dev : 依赖: libssl3 (= 3.0.8-1ubuntu1.1) 但是 3.0.8-1ubuntu1.2 正要被安装
  • MySQL联合查询、最左匹配、范围查询导致失效
  • 部署zabbix
  • 服务器感染了.locked、.locked1勒索病毒,如何确保数据文件完整恢复?
  • 【Linux系统化学习】命令行参数 | 环境变量的再次理解
  • 【STM32】TIM定时器编码器
  • 力扣44题通配符匹配题解
  • windows系统安装RocketMQ_dashboard
  • ATECLOUD电源自动测试系统打破传统 助力新能源汽车电源测试
  • 如何教会小白使用淘宝API接口获取商品数据
  • Redis有序集合对象
  • 【C++数据结构 | 字符串速通】10分钟秒杀字符串相关操作 | 字符串的增删改查 | 字符串与数组相互转换