C#接口定义

C#不支持多重继承,但是客观世界又有多重继承的需要,因此,c#提出了接口的概念。通过接口可以实现多重继承的功能。

实现接口的类或结构要与接口的定义严格一致,接口描述可属于任何类或结构的一组相关,接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成

索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。

类和结构可以像类继承基类或结构一样从接口继承,而且可以继承多个接口。当类或结构继承接口时,它继承成员定义但不继承实现。若要实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。类的属性和索引器可以为接口上定义的属性或索引器定义额外的访问器。例如,接口可以声明一个带有get访问器的属性,而实现该接口的类可以声明同时带有get和set访问器的同一属性。但是,如果属性或索引器使用显式实现,则访问器必须匹配。

  接口可以继承其他接口。类可以通过其继承的基类或接口多次继承某个接口。在这种情况下,如果将该接口声明为新类的一部分,则类只能实现该接口一次。如果没有将继承的接口声明为新类的一部分,其实现将由声明它的基类提供。基类可以使用虚拟成员实现接口成员,在这种情况下,继承接口的类可通过重写虚拟成员来更改接口行为。

  定义接口

  接口的声明采用下列格式:

修饰符 interface 接口名称 :继承的接口列表   //接口的名称一般由I开头
{   
接口内容;   
}

  其中,除interface 和接口名称,其他的都是可选项,下面是一个C#接口定义的例子,代码如下:

 

 public interface iSomeInterface { void UpdateDataBase(); }

  接口继承

  一个接口可以从一个或多个基接口继承。例如:

 

 interface iOthrerInterface :iSomeInterface,iCom { int CompareTo(object obj); }

 

namespace ConsoleApplication7
{
    interface Company
    {
        void onDuty();//接口的主题部分如果是方法则一定是公共抽象的,public abstract void onDuty();=void onDuty();
        void offDuty();
    }
    class Employee : Company
    {
        public void onDuty()
        {
            Console.WriteLine("都在上班");
        }
        public void offDuty()
        {
            Console.WriteLine("都下班了");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Employee employee=new Employee();
            employee.onDuty();
            employee.offDuty();
            Console.Read();

}
    }
}

//实现多个接口继承类

namespace ConsoleApplication9
{
    abstract class Person
    {
        public void eat()
        {
            Console.WriteLine("person is eating!");
        }
        public abstract void breathe();
    }
    interface Company
    {
        void onDuty();
        void offDuty();
    }
    class Employee : Person, Company
    {
        public void onDuty()
        {
            Console.WriteLine("is onduty!");
        }
        public void offDuty()
        {
            Console.WriteLine("is offduty!");
        }
        public override void breathe()
        {
            Console.WriteLine("is breathing!");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Employee employee = new Employee();
            employee.onDuty();
            employee.offDuty();
            employee.breathe();
            Console.Read();
        }
    }
}

 

索引器的定义

C#中的类成员可以是任意类型,包括数组和集合。当一个类包含了数组和集合成员时,索引器将大大简化对数组或集合成员的存取操作。

定义索引器的方式与定义属性有些类似,其一般形式如下:

[修饰符] 数据类型 this[索引类型 index]

{

    get{//获得属性的代码}                                                 

    set{ //设置属性的代码}

}

修饰符包括 public,protected,private,internal,new,virtual,sealed,override, abstract,extern.

数据类型是表示将要存取的数组或集合元素的类型。

索引器类型表示该索引器使用哪一类型的索引来存取数组或集合元素,可以是整数,可以是字符串;this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称。 例如:

class Z
{
        //可容纳100个整数的整数集
        private long[] arr = new long[100];
        //声明索引器
        public long this[int index]
        {
            get
            { //检查索引范围
                if (index < 0 || index >= 100)
                {
                    return 0;
                }
                else
                {
                    return arr[index];
                }
            }
            set
            {
                if (!(index < 0 || index >= 100))
                {
                    arr[index] = value;
                }
            }
   }

2、索引器的使用

通过索引器可以存取类的实例的数组成员,操作方法和数组相似,一般形式如下:

对象名[索引]

其中索引的数据类型必须与索引器的索引类型相同。例如:

Z  z=new  z();

z[0]=100;

z[1]=101;

Console.WriteLine(z[0]);

表示先创建一个对象z,再通过索引来引用该对象中的数组元素。

3、接口中的索引器

在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get或set均不能省略;如果只读的,省略set访问器;如果是只写的,省略get访问器。

例如:

public interface IAddress

{

string this[int index]{get;set;}

string Address{get;set;}

string Answer();

}

表示所声明的接口IAddress包含3个成员:一个索引器、一个属性和一个方法,其中,索引器是可读写的。

4、索引器与属性的比较

索引器与属性都是类的成员,语法上非常相似。索引器一般用在自定义的集合类中,通过使用索引器来操作集合对象就如同使用数组一样简单;而属性可用于任何自定义类,它增强了类的字段成员的灵活性。

属        性                                             索  引  器

允许调用方法,如同公共数据成员

允许调用对象上的方法,如同对象是一个数组

可通过简单的名称进行访问

可通过索引器进行访问

可以为静态成员或实例成员

必须为实例成员

其get访问器没有参数

其get访问器具有与索引器相同的形参表

其set访问器包含隐式value参数

除了value参数外,其set访问器还具有与索引器相同的形参表

  实现接口的类或结构要与接口的定义严格一致。接口描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件、索引器或这4种成员类型的任何组合构成。接口不能包含字段。接口成员一定是公共的。

  

C#接口定义,索引器的定义相关推荐

  1. java类中定义索引器,C#面向对象基础——字段、属性和索引器

    关于面向对象编程,在很多语言里面都出现过,最常用的如java和c++, C#语言关于面向对象编程的规范,我觉得介于上面两者之间,我的理解是它比较偏向c++,或许是因为跟它的析构函数有关系,像java有 ...

  2. C#索引器-索引器的定义

    索引器定义类似于属性,但其功能与属性并不相同.索引器提供一种特殊的方法编写get和set访问器.属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员.定义索引器的语法如下: ...

  3. 【转】C#索引器-索引器的定义

    索引器定义类似于属性,但其功能与属性并不相同.索引器提供一种特殊的方法编写get和set访问器.属性可以像访问字段一样访问对象的数据,索引器可以使用户像访问数组一样访问类成员.定义索引器的语法如下: ...

  4. 50 Python - 装饰器 类定义装饰器

    04 类定义装饰器 上节通过函数定义装饰器,本节通过类定义装饰器 001 定义类装饰器 定义一个类,类里面两个函数,一个构造函数init(),一个调用函数call() 构造函数init时候,传递一个函 ...

  5. C#拾遗系列(4):索引器

    1. 概述 索引器允许类或结构的实例就像数组一样进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数.索引器在语法上方便您创建客户端应用程序可将其作为数组访问的类.结构或接口.索引器经常是在主 ...

  6. .Net学习难点讨论系列16 - 索引器

    索引器是一个我们经常打交道的特性,在编程过程中,多多少少都会用到索引器.而关于索引器一些高级话题,如给自定义的类添加索引器等也是本文着重介绍的.索引器本质上是一组get和set访问器, []中提供的是 ...

  7. c#索引器介绍|C#索引器写法|c#索引器例子

    索引器就是特殊的属性,以下是最简单的索引器例子 就是给定索引编号去找索引编号对应的值,类似属性的数组 public string this[string configName]         {   ...

  8. 黄聪:C#索引器详解、示例

    索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写. 1.索引器的定义 C#中的类成员可以是任意类型,包括数组和集合.当一个类包含了数组和集合成员时,索引器 ...

  9. 索引器的详细讲解(C#)

    索引器与属性很类似.索引器的创建与属性创建所使用的编程语言特性是一样的.索引器使属性被索引:使用一个或多个参数引用的属性,这些参数为某些值集合提供索引. 索引器语法 可以通过变量名和方括号访问索引器. ...

最新文章

  1. Ubuntu安装MongoDB
  2. 云开发地图标记导航 云开发一次性取所有数据
  3. javascript 之 push方法
  4. oracle行列转换
  5. 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
  6. android 工作 绝望,我的人生绝望手游
  7. 同时满足两个条件怎么写_2020年宅基地确权需满足哪些条件?可以写几个人的名字?...
  8. 在带有组合框的值列表的下拉列表中显示显示属性的子集
  9. JAVA分布式架构的演变及解决方案
  10. 如何分析竟争网站和优秀网站的设计风格
  11. linux锐捷认证成功无法上网,锐捷认证成功但是却无法上网怎么办
  12. 教育平台的线上课程 智能推荐策略
  13. 使用vue实现四级联动
  14. 智慧城市将成为推进我国新型城镇化的新思路、新手段、新模式
  15. pixi 小游戏_关于PIXI引擎制作页面小游戏的几个总结
  16. 网络打印机计算机服务,在Windows7中添加网络打印机的解决方案提示“本地打印机后台处理程序服务未运行”...
  17. 即时聊天工具混战中国
  18. Node.js的卸载
  19. 学校人事管理系统python实现
  20. 解析机器人流程自动化技术的原理

热门文章

  1. 看电影《致青春》有感
  2. 国潮文化引领手办市场新风向 b站会员购成消费首选平台
  3. 超轻薄笔记本电脑软件测试,50轮Cinebench极限测试 8款主流轻薄本CPU性能横评
  4. 安卓系统刷机怎么刷机_安卓系统手机怎么刷机
  5. 佳明手表怎么设置用户定制显示
  6. 佳明服务器又中断了,Garmin佳明多项服务中断 官方回应正在加速恢复
  7. linux 系统恢复,Linux 系统修复,无需重装
  8. 大面积无线WIFI覆盖 H3C WX3010E(AC+PoE三层交换机)+ H3C WA2620E、WA4320无线AP +华为USG6310S防火墙
  9. 计算机英语口语面试自我介绍,英语面试_面试英语口语:自我介绍模板_沪江英语...
  10. iPhone管理软件iMazing 2.16.9激活密钥免费版百度网盘下载