LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

[点晴永久免费OA]C#接口的实现

admin
2023年4月13日 8:34 本文热度 746

接口的定义方式与类相似,使用的代码如下:

interface IMyInterface

{

//Interface member.

}

接口成员的定义与类成员的定义相似,但具有几个重要的区别:

【1】、不允许使用访问修饰符(public、private、protected或internal),所有接口成员都是隐式公共的。

【2】、接口成员不能包含代码体。

【3】、接口不能定义字段成员。

【4】、不能用关键字static、virtual、abstract或sealed来定义接口成员。

【5】、类型定义成员是禁止的。

但要隐藏从基接口中继承的成员,可以用关键字new来定义它们,例如:

interface IMyBaseInterface

{

        void DoSomething();

}

interface IMyDerivedInterface:IMyBaseInterface

{

        new void DoSomething();

}

其方式与隐藏继承的类成员的方式一样。

在接口中定义的属性可以定义访问块get和set中的哪一个能用于该属性(或将它们同时用于该属性),例如:

interface IMyInterface

{

        int MyInt{get;set;}

}

其中int属性MyInt有get和set存取器。对于访问级别有更严格限制的属性来说,可以省略它们中的任一个。

注意:这个语法类似于自动属性,但自动属性是为类(而不是接口)定义的,自动属性必须包含get和set存取器。

接口没有指定应如何存储属性数据。接口不能指定字段,例如用于存储属性数据的字段。最后,接口与类一样,可以定义为类的成员(但不能定义为其他接口的成员,因为接口不能包含类型定义)。

在类中实现接口

实现接口的类必须包含该接口所有成员的实现代码,且必须匹配指定的签名(包括匹配指定的get和set块),并且必须是公共的。例如:

public interface IMyInterface

{

        void  DoSomething();

         void  DoSomethingElse();

}

public interface MyClass:IMyInterface

{

        public void  DoSomething(){};

        public void  DoSomethingElse(){};

}

可使用关键字virtual或abstract来实现接口成员,但不能使用static或const。还可以在基类上实现接口成员,例如:

public interface IMyInterface

{

        void  DoSomething();

        void  DoSomethingElse();

}

public class MyBaseClass

{

        public void  DoSomething(){}

}

public class MyDerivedClass:MyBaseClass,IMyInterface

{

        public void DoSomethingElse(){};

}

继承一个实现给定接口的基类,就意味着派生类隐式地支持这个接口,例如:

public interface IMyInterface

{

        void  DoSomething();

        void  DoSomethingElse();

}

public class MyBaseClass:IMyInterface

{

        public virtual void  DoSomething(){};

        public virtual void  DoSomethingElse(){};

}

public class MyDerivedClass:MyBaseClass

{

        public override void  DoSomething(){};

}

显然,在基类中把实现代码定义为虚拟,派生类就可以替换该实现代码,而不是隐藏它们。如果要使用new关键字隐藏一个基类成员,而不是重写它,则方法IMyInterface.DoSomething()就总是引用基类版本,即使通过这个接口来访问派生类,也是这样。

 1、显式实现接口成员

也可以由类显式地实现接口成员。如果这么做,就只能通过接口来访问该成员,不能通过类来访问。隐式成员可以通过类和接口来访问。

例如,如果类MyClass隐式地实现接口IMyInterface的方法DoSomething(),如上所述,则下面的代码就是有效的:

MyClass myObj=new MyClass();

myObj.DoSomething();

下面的代码也是有效的:

MyClass myObj=new MyClass();

IMyInterface myInt=myObj;

myInt.DoSomething();

另外,如果MyDerivedClass显示地实现DoSomething(),就只能使用后一种技术。其代码如下:

public class MyClass:IMyInterface

{

        void IMyInterface.DoSomething(){}

        public void  DoSomethingElse(){}

}

其中DoSomething()是显示实现的,而DoSomethingElse()是隐式实现的。只有后者可以直接通过MyClass的对象实例来访问。

 2、其他属性存取器

如果实现带属性的接口,就必须实现匹配的get/set存取器。这并不是绝对正确的——如果在定义属性的接口中只包含set块,就可给类中的属性添加get块,反之亦然。但只有隐式实现接口时才能这么做。另外,大多数时候都想让所添加的存取器的可访问修饰符比接口中定义的存取器的可访问修饰符更严格。因为按照定义,接口定义的存取器是公共的,也就是说,只能添加非公共的存取器。例如:

public interface IMyInterface

{

        int MyIntProperty{get;}

}

public class MyBaseClass:IMyInterface

{

        public int MyIntProperty{get;protected set;}

}

如果将新添加的存取器定义为公共的,那么能够访问实现该接口的类的代码也可以访问该存取器。但是,只能访问接口的代码就不能访问该存取器。



该文章在 2023/4/13 8:34:02 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved