c# 接口interface基础入门小例子

时间:2023-11-04 16:55:45 


/// <summary>
    /// interface
    /// 与抽象类的区别:
    /// 1,abstract可以有具体方法和抽象方法(必须有一个抽象方法),interface没有方法实现
    /// 2,abstract可以有构造函数和析构函数,接口不行
    /// 3,一个类可以实现多个interface,但只能继承一个abstract
    /// 特点:
    /// interface成员隐式具有public,所以不加修饰符
    /// 不可以直接创建接口的实例,如:IPerson xx=new IPerson()//error
    /// </summary>
    public interface IPerson
    {
        string Name { get; set; }//特性
        DateTime Brith { get; set; }
        int Age();//函数方法
    }
    interface IAdderss
    {
        uint Zip { get; set; }
        string State();
    }


/// <summary>
    /// interface实现interface
    /// </summary>
    interface IManager:IPerson
    {
        string Dept { get; set; }
    }
    /// <summary>
    /// 实现多个interface
    /// 实现哪个interface必须写全实现的所有成员!
    /// </summary>
    public class Employee:IPerson,IAdderss
    {
        public string Name { get; set; }
        public DateTime Brith { get; set; }
        public int Age()
        {
            return 10;
            throw new NotImplementedException();
        }
        public uint Zip { get; set; }
        public string State()
        {
            return "alive";
        }
    }


/// <summary>
     /// 重写接口实现:
     /// 如下,类 Employer 实现了IPerson,其中方法 Age() 标记为virtual,所以继承于 Employer 的类可以重写  Age()
     ///
     /// </summary>
     public class Employer:IPerson
     {
         public string Name { get; set; }
         public DateTime Brith { get; set; }
         public virtual int Age()
         {
             return 10;
         }
     }
     public class work:Employer
     {
         public override int Age()
         {
             return base.Age()+100;//其中base是父类
         }
     }

实现,对象与实例:


#region #interface

             Employee eaji = new Employee()
                 {
                     Name = "aji",
                     Brith = new DateTime(1991,06,26),
                 };

             #endregion
             #region #interface 的强制转换

             IPerson ip = (IPerson)eaji; //可以通过一个实例来强制转换一个接口的实例,进而访问其成员,
             ip.Age();
             DateTime x=ip.Brith;

             //也可以写成这样:
             IPerson ip2 = (IPerson) new Employee();

             //但是这样子有时候不是很安全,我们一般用is 和 as来强制转换:
             if (eaji is IPerson)
             {
                 IPerson ip3 = (IPerson)eaji;
             }
             //但is并不是很高效,最好就是用as:
             IPerson ip4 = eaji as IPerson;
             if (ip4 != null)//用as时,如果发现实现ip4的类没有继承 IPerson,就会返回null
             {
                 Console.WriteLine(ip4.Age());
             }

             #endregion

标签:接口,interface
0
投稿

猜你喜欢

  • 解决maven没有打包xml文件的问题

    2023-11-27 14:51:01
  • Java线程通信之wait-notify通信方式详解

    2022-05-17 19:35:46
  • C#缓存之SqlCacheDependency用法实例总结

    2023-04-14 10:31:37
  • Java使用开源Rxtx实现串口通讯

    2023-06-13 19:15:47
  • 带你了解Java数据结构和算法之数组

    2022-09-29 21:18:33
  • C#接口(Interface)用法分析

    2022-10-18 10:59:17
  • java.lang.Void类源码解析

    2022-07-15 04:07:46
  • Android 自定义View实现单击和双击事件的方法

    2022-03-23 19:21:18
  • springboot与vue详解实现短信发送流程

    2023-05-24 14:55:29
  • Unity实现苹果手机Taptic震动

    2023-02-15 07:18:47
  • c#根据文件类型获取相关类型图标的方法代码

    2022-07-30 10:56:41
  • Android按钮按下的时候改变颜色实现方法

    2021-09-24 20:15:39
  • 使用maven命令安装jar包到本地仓库的方法步骤

    2022-10-19 21:57:58
  • java多线程之停止线程的方法实例代码详解

    2023-03-23 04:35:21
  • 浅谈Ribbon、Feign和OpenFeign的区别

    2022-12-21 15:40:27
  • C#使用第三方组件生成二维码汇总

    2023-10-03 22:15:21
  • 简单的一次springMVC路由跳转实现

    2023-01-09 10:05:11
  • Android实现上拉加载更多以及下拉刷新功能(ListView)

    2022-03-02 15:50:41
  • Java异常处理操作 Throwable、Exception、Error

    2022-02-19 20:56:13
  • C#三种方法获取文件的Content-Type(MIME Type)

    2022-05-28 16:57:27
  • asp之家 软件编程 m.aspxhome.com