实现接口和显示实现接口(接口可以实现接口)

网友投稿 296 2023-01-18


本篇文章给大家谈谈实现接口和显示实现接口,以及接口可以实现接口对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享实现接口和显示实现接口的知识,其中也会对接口可以实现接口进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

显示实现接口和实现接口的区别,接口中

隐式实现的话实现的方法属于实现的类的,可以直接通过类的对象访问,显式实现的话方法是属于接口的,可以看成是寄托在类中实现的,访问这些方法时要先把对象转换成接口对象,然后通过接口对象调用,比如Int32显式实现了IConvertible接口,调用IConvertible接口的ToSingle方法时必须先将Int32对象转换成IConvertible接口对象,例如:
Int32 x=5;
Single s=((IConvertible)x).ToSingle(null);
一般来讲显式实现用得比较少,但是在实现具有相同名称和签名的两个接口方法时就必须用到了。

显式实现接口和隐式实现接口的区别

隐示实现 接口和类都可以访问
显示实现 只有接口可以访问
显示实现实现接口和显示实现接口的益处 1:隐藏代码的实现 2:在使用接口访问的系统中,调用者只能通过接口调用而不是底层的类来访问。
显示实现接口说明实现接口和显示实现接口
1、不能在方法调用、属性访问以及索引指示器访问中通过全权名访问显式接口成员执行体。事实上,显式接口成员执行体只能通过接口的实例,也就是仅仅引用接口的成员名称来访问;
2、显式接口成员执行体不能使用任何访问限制符,也不能加上abstract, virtual, override或static 修饰符,即使是public也不可以;
3、显式接口成员执行体和其实现接口和显示实现接口他成员有着不同的访问方式。因为不能在方法调用、属性访问以及索引指示器访问中通过全权名访问,显式接口成员执行体在某种意义上是私有的。但它们又可以通过接口的实例访问,也具有一定的公有性质;
4、只有类在定义时,把接口名写在实现接口和显示实现接口了基类列表中,而且类中定义的全权名、类型和返回类型都与显式接口成员执行体完全一致时,显式接口成员执行体才是有效的;
5、一个类中既显示又隐式的实现接口,这时显式实现方法只能通过接口的引用来直接访问,隐式实现方法只可以通过类的实例来直接访问;
6、一个类如果实现恶劣多个接口,并且这多个被实现的接口含有相同签名的接口声明,那么如果其中有一个被显式实现,那么其它接口中同签名的方法也必须被显式实现。
为什么要显示实现接口呢,有如下好处:
1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。
2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。

c#显示实现接口到底啥意思

在C#里所谓的显式实现接口:就是使用“限定接口名称”来声明,即“接口名.方法名”。
显式实现接口的使用场景是:如果在要实现的多个接口中,存在有相同的成员,那么此时,就可以使用接口名.成员名来区分实现不一样的功能。
比如,有下面两个接口
interface IAbc1{
void MyFun();
}
interface IAbc2{
void MyFun();
}
下面是以上两个接口的实现类
class MyClass:IAbc1,IAbc2{
// 此时使用显式接口实现 使用 接口名.成员名 的语法格式
void IAbc1.MyFun(){ // 注意不能加任何的访问修饰符,因为那样是错误的
// 这里是实现IAbc1下的成员函数
}
void IAbc2.MyFun(){
// 这里是实现IAbc2下的成员函数
}
}

C#中接口成员的显示实现和隐式实现有什么区别?

隐式实现和显示实现的例子
隐式地实现接口成员
创建一个接口,Chinese,包含一个成员 Speak;我们创建一个类Speaker,实现接口Chinese
//隐藏式实现例子
public interface Chinese
{
string Speak();
}public class Speaker : Chinese
{
public string Speak()
{
return "中文";
}
}这个就是隐式实现
显式地实现接口成员 -- 创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。
创建一个接口,English,包含一个成员 Speak;让我们的类Speaker来实现接口English//显式实现例子
public interface English
{
string Speak();
}public class Speaker : English
{
string English.Speak()
{
return "English";
}
} 隐式实现和显示实现的区别
1. 语法层面的区别
l 隐式方式Speaker的成员(Speak)实现有而且必须有自己的访问修饰符(public),显示实现方式Speaker的成员(Speak)不能有任何的访问修饰符。
l 显示实现方式Speaker使用接口名称和一个句点命名该类成员(Speak)来实现的:English.Speak()
2. Client的使用者层面
隐式实现的客户端调用,注意类的声明,可以用接口声明,也可以用实现类 Speaker声明。调用者都可以得到调用实例化对象的行为Speak;
class Program
{
static void Main(string[] args)
{
Chinese c = new Speaker();
c.Speak(); Speaker s = new Speaker();
s.Speak();
}
} 显式实现的客户端调用,注意类的声明,只可以用接口声明,调用者才可以可以得到调用实例化对象的行为Speak; Code
class Program
{
static void Main(string[] args)
{
English c = new Speaker();
c.Speak();
//下面写法将引起编译错误错误“PetShop.Speaker”不包含“Speak”的定义
// Speaker s = new Speaker();
// s.Speak();
}
}隐示实现对象声明为接口和类都可以访问到其行为, 显示实现只有声明为接口可以访问。
选择隐式实现还是显示实现
隐式和显式接口实现的关键区别显然并不在于方法声明,而是在于从类外部的可访问性。以下是一些基本的设计原则,可以利用它们来帮助自己选择显式还是隐式实现。
1. 业务语义的考虑?
考虑接口Chinese和English对于成员的Speak的业务需求,Speaker要实现这两个接口,如果采用隐式实现,语法没有问题,业务满足了吗?
例如:
Code
//服务端:
public class Speaker : English, Chinese
{
public string Speak()
{
return "English";
}
}//调用端:
class Program
{
static void Main(string[] args)
{
Chinese c = new Speaker();
c.Speak();
}
}呵呵,这完全可以编译通过,但是放在实际的业务场景去考虑,这不是很幽默吗?这个时候就考虑使用一个显式的实现显式实现
//服务端:
public class Speaker:English,Chinese
{
string English.Speak()
{
return "English";
}
string Chinese.Speak()
{
return "中文";
}
}//调用端:
class Program
{
string English.Speak()
{
return "English";
} string Chinese.Speak()
{
return "中文";
}
}2. 实现类是否准备让调用者独立使用?
虽然显示接口实现提供了更好的封装性,对调用者使用可以强制其进行接口声明,但是如果你准备让用户可以单独使用你这个类的功能,请提供隐式实现。
C#中的接口VS Java中的接口
Java中并没有在语言层面提供隐式和显式接口的实现,那么对于我们例子的中场景如何解决?当然有办法,只是没有C#优雅,还是Java故意在语言层面不提供这样的解决方案,难道认为他破坏了类的单一职责原则?我也在想这个问题,是不是一个Speaker只实现Chinese或者English之一那才是比较好的设计?
C#中接口总结
接口描述的是可属于任何类或结构的一组相关功能。接口可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。接口不能包含字段。接口成员一定是公共的,而且是默认的,不要画蛇添足。
当类或结构继承接口时,意味着该类或结构为该接口定义的所有成员提供实现。接口本身不提供类或结构能够以继承基类功能的方式继承的任何功能。但是,如果基类实现接口,派生类将继承该实现。
如果一个类机继承类并实现接口,一定要吧类写在符号:后面的第一个位置。

c# 接口与类之间的转换 强制转换

C_A a=new C_A();
B b=a; // 子类到父类 或 接口,不需要强制转换
C_A c = (C_A)b; // 父类或接口 到子类,需要强制转换,因为系统无法判定这个对象是哪个子类

Map m=new Map();为什么不能这么写???

Map是个接口实现接口和显示实现接口,HashMap是它的实现类。Map 是接口,是不能实例源化的,所以只能使用其实现类来实例化。

只不过一般习惯在前面使用接口来进行创建。一般情况下,都是用接口来声明的。用Map的好处是new后面可以跟其他的实现,不一定是HashMap,可以跟其他的。用HashMap声明的话,new后面貌似就只能跟HashMap实现接口和显示实现接口了。

扩展资料

接口的声明

1、接口名称第一个字符必须是I。

2、接口中的方法不能有访问修饰符,方法体(方法的具体实现)实现接口和显示实现接口:可以有方法参数和方法返回值。

3、接口中可以定义方法、属性、索引器、事件,不可以定义字段、运算符重载、构造、析构函数、static关键字。

4、实现接口中的方法时,需要添加访问修饰符。

5、如果一个类继承的有类和接口时,那么类一定要放到第一位置上。

6、如果多个接口中包含后相同方法名,的方法,我们使用隐式显示接口后,不知道这个显示的是哪个接口的方法,这个时候就需要。

显示实现接口。显示实现接口 void IInterface.Add(){},需要指定那个接口里面的方法,调用的时候需要把子类转换成父类

(接口)去调用实现接口和显示实现接口:calss a=new class()实现接口和显示实现接口;  Interface ic=(interface)a;ic.Add();

关于实现接口和显示实现接口和接口可以实现接口的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 实现接口和显示实现接口的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于接口可以实现接口、实现接口和显示实现接口的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot MongoDB 索引冲突分析及解决方法
下一篇:Spring容器扩展机制的实现原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~