C#中,什么是接口的显式执行(实现)和 隐式执行(实现)?以及这两种接口实现方式的区别,及使用...
我是在《C#入门经典(第四版)》这本书中遇到的阅读问题,具体是下面这段话:“接口成员也可以由类显式地执行,如果这么做,该成员就只能通过接口来访问,不能通过类来访问”看完这...
我是在《C#入门经典(第四版)》这本书中遇到的阅读问题,具体是下面这段话:
“接口成员也可以由类显式地执行,如果这么做,该成员就只能通过接口来访问,不能通过类来访问”
看完这句话就更晕了,想来想去,还是应该先弄清这两种实现方式是怎么样的,这是根本,希望热心网友,给予详细解释,谢谢! 展开
“接口成员也可以由类显式地执行,如果这么做,该成员就只能通过接口来访问,不能通过类来访问”
看完这句话就更晕了,想来想去,还是应该先弄清这两种实现方式是怎么样的,这是根本,希望热心网友,给予详细解释,谢谢! 展开
2个回答
展开全部
关于接口的实现问题,我尽量通俗的解释下:
假设你设定了某个接口Interface I1; 里面有个需要实现的方法, 如 int func1();
那么, 进一步的,你写了一个类C1, 去实现这个接口I1, 此时就有两种实现虚答的方法:
方法1:显示实现,
public int func1(){.....}
方法凯誉轿2:隐式实现,
private int func1(){.....} (或protected int func1(){.....})
发现区别了吧,如果是显示的,那么进一步,你可以通过C1.func1();来执行这盯肆个函数,即:
C1 myC1 = new C1();
myC1.func1();
但是隐式就不能这样,因为private(或protected)修饰词不允许用户直接访问,但你仍然可以通过接口访问这个函数,即:
I1 myI1 = new C1(); //注意,此时myI1是接口, 并通过C1实现了这个接口.
myI1.func1(); //通过接口访问了某个隐式实现的函数.
这就是你问题中所说的内容.
希望对你有帮助
假设你设定了某个接口Interface I1; 里面有个需要实现的方法, 如 int func1();
那么, 进一步的,你写了一个类C1, 去实现这个接口I1, 此时就有两种实现虚答的方法:
方法1:显示实现,
public int func1(){.....}
方法凯誉轿2:隐式实现,
private int func1(){.....} (或protected int func1(){.....})
发现区别了吧,如果是显示的,那么进一步,你可以通过C1.func1();来执行这盯肆个函数,即:
C1 myC1 = new C1();
myC1.func1();
但是隐式就不能这样,因为private(或protected)修饰词不允许用户直接访问,但你仍然可以通过接口访问这个函数,即:
I1 myI1 = new C1(); //注意,此时myI1是接口, 并通过C1实现了这个接口.
myI1.func1(); //通过接口访问了某个隐式实现的函数.
这就是你问题中所说的内容.
希望对你有帮助
更多追问追答
追问
你的意思是,显式实现和隐式实现,区别就是接口实现成员的 访问修饰符的区别而已,好像没这么简单吧,我那本书,好像没明确这么提?
追答
sorry,你说的概念我误解了,显示实现是这样的:比如某个接口:
interface I1
{
void func1();
}
显示实现:
public class C1: I1
{
void I1.func1()
{
//显示实现即通过接口.函数 来实现某个函数
}
}
隐式实现:
public class C1: I1
{
void func1()
{
//隐式实现即不写出接口的名称,只要函数名称与接口定义相同即可
}
}
这样~
展开全部
给你看一段代码你就完全明白了:
namespace Test1
{
class Program
{
public static void Main(string[] args)
{
IA a = new C();
a.Call(); //可以看到显示接口实现的方法(即Call())只能通过接口a来访问;
C c = new C();
c.Call(); //错穗桐桥误,无法通过类访问;
c.Move(); //可以看到隐式接口实现的方法(即Move())还可以通过类C来直接访问;
Console.ReadLine();
}
}
interface IA
{
void Call();
}
interface IB
{
void Move();
}
class C:IA
{
void IA.Call() //这就是你想知道的接口的显示执行,其实我们一般叫做显示接口成员实现
{
Console.WriteLine("IA");
}
public void Move() //轮仿这就是你想知道的接口的隐式执行,当然我们一般叫做隐式接口成员实现
{
Console.WriteLine("IB");
}
}
}
上面的猜猛注释中已经说明了什么是接口的显式执行(实现)和 隐式执行(实现);
至于区别,其实就是一个写法的区别,显式执行使用的是接口的完全限定名,但是隐式执行只是在实现它的类中使用一般的名称(前面没有带上方法所属的 接口+ “.”)
至于它们的使用,你可以查阅一下 关于“显式接口成员实现”相关的介绍,这方面的资料很多,最基本 一个功能就是可以消除因同时含有多个签名相同的接口成员所引起的多义性。
如:
interface IA
{
void Call();
}
interface IB
{
void Call();
}
class C:IA ,IB
{
//实现代码,这里如果需要对不同的接口成员有不同的实现,就需要使用显式接口成员实现了,IA.Call() IB.Call();
}
我想你应该明白的~
namespace Test1
{
class Program
{
public static void Main(string[] args)
{
IA a = new C();
a.Call(); //可以看到显示接口实现的方法(即Call())只能通过接口a来访问;
C c = new C();
c.Call(); //错穗桐桥误,无法通过类访问;
c.Move(); //可以看到隐式接口实现的方法(即Move())还可以通过类C来直接访问;
Console.ReadLine();
}
}
interface IA
{
void Call();
}
interface IB
{
void Move();
}
class C:IA
{
void IA.Call() //这就是你想知道的接口的显示执行,其实我们一般叫做显示接口成员实现
{
Console.WriteLine("IA");
}
public void Move() //轮仿这就是你想知道的接口的隐式执行,当然我们一般叫做隐式接口成员实现
{
Console.WriteLine("IB");
}
}
}
上面的猜猛注释中已经说明了什么是接口的显式执行(实现)和 隐式执行(实现);
至于区别,其实就是一个写法的区别,显式执行使用的是接口的完全限定名,但是隐式执行只是在实现它的类中使用一般的名称(前面没有带上方法所属的 接口+ “.”)
至于它们的使用,你可以查阅一下 关于“显式接口成员实现”相关的介绍,这方面的资料很多,最基本 一个功能就是可以消除因同时含有多个签名相同的接口成员所引起的多义性。
如:
interface IA
{
void Call();
}
interface IB
{
void Call();
}
class C:IA ,IB
{
//实现代码,这里如果需要对不同的接口成员有不同的实现,就需要使用显式接口成员实现了,IA.Call() IB.Call();
}
我想你应该明白的~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询