接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个接口,可以使用隐式实现,如果类或者结构继承了多个接口那么接口中相同名称成员就要显式实现。显示实现是通过使用接口的完全限定名来实现接口成员的。
使用显式接口成员执行体通常有两个目的:
1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。
2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。
example:
/// <summary>
/// IGoodbye interface
/// </summary>
public interface IGoodbye
{
void Speak();
void Bye();
}
/// <summary>
/// IHello interface
/// </summary>
public interface IHello
{
void Speak();
}
/// <summary>
/// ISay interface
/// </summary>
public interface ISay
{
void Say();
}
---------------------------------
/// <summary>
/// 隐式接口实现
/// </summary>
public class Hello : ISay, IHello
{
public Hello()
{
}
public void Say()
{
Console.WriteLine("Say Hello");
}
public void Speak()
{
Console.WriteLine("Speak Hello");
}
}
/// <summary>
/// 显式接口实现
/// </summary>
public class Speak : IHello, IGoodbye
{
public Speak()
{
}
void IHello.Speak()
{
Console.WriteLine("Hello");
}
void IGoodbye.Speak()
{
Console.WriteLine("Good Bye");
}
void IGoodbye.Bye()
{
Console.WriteLine("Bye-Bye");
}
}
-------------------------
上面的显式实现,不能如此调用。
Speak speak = new Speak();
speak.Speak(); 这里是不成功的。
只能这么用: ((IHello)speak).Speak();
或者这样调用:
Speak speak = new Speak();
speak .Speak(); //错误:不同的方法
IHello control = speak ;
control.Speak(); //调用 Speak的Speak方法
上述代码中对speak.Speak()的调用是错误的,因为speak 本身并没有提供这一方法。control.Speak( )是正确的调用方式。
注释:接口本身不提供所定义的成员的实现,它仅仅说明这些成员,这些成员必须依靠实现接口的类或其它接口的支持。
--------------
而隐式实现,就可以直接调用。
Hello hello = new Hello();
hello.Say();
hello.Speak();
分享到:
相关推荐
C# 中接口的实现方式可以分为隐式接口和显式接口两种。隐式接口是指在类中直接实现接口的成员,而不需要使用接口名称来限定成员。例如: ```csharp public interface IChinese { string Speak(); } public class ...
接口有两种实现方式:隐式接口实现和显式接口实现。 **隐式接口实现**是默认的方式,当类中定义了一个成员,其签名与接口中定义的成员完全匹配时,这个成员就被认为实现了该接口的成员。例如: ```csharp ...
在C#编程中,接口(interface)是一种非常重要的概念,它定义了一组契约,规定了类或结构必须实现的方法、属性、索引器和事件。...在实际编程中,合理利用接口和显式实现可以提高代码的可扩展性和可读性。
总结来说,C#中的隐式实现和显式实现接口方法提供了灵活的方式来实现接口,根据具体需求选择合适的方式。隐式实现简洁易用,适合常规情况;而显式实现则在处理多接口冲突和优化性能(特别是值类型)时发挥重要作用。...
总之,C#中的显式实现接口成员是一种特殊的实现方式,它增强了代码的灵活性和可维护性,尤其在处理多接口和避免命名冲突时显得尤为重要。理解并掌握这一特性,对于提升C#编程技能和设计高效、健壮的软件架构至关重要...
在C#中,通常我们隐式实现接口,即不指定接口名,只需在类中定义接口中声明的成员。然而,显式实现接口时,类的成员会使用接口名称作为前缀,语法如下: ```csharp class MyClass : IMyInterface { void ...
总之,C#接口技术在面向对象编程中起着至关重要的作用,它通过提供多态性、解耦和灵活性,帮助开发者构建更加高效、可扩展的系统。熟练掌握接口的使用,能让你的代码设计更加符合面向对象的原则,提高软件的质量和可...
在C#中,接口中的所有成员都是隐式抽象和公开的,因此不存在非抽象成员的概念。然而,如果接口成员在派生接口中再次声明,这被称为接口的“重写”或“覆盖”。这样的情况一般出现在接口继承其他接口时,允许子接口对...
本教程将深入探讨C#中的基础语法,特别是委托、接口和类型等关键概念。 一、C#基本语法 1. 变量与数据类型:在C#中,变量是用来存储数据的容器。每种变量都有特定的数据类型,例如整型(int)、浮点型(float)、...
C#提供了多种类型的转换,包括隐式转换(Implicit Conversion)和显式转换(Explicit Conversion)。隐式转换是系统自动进行的,不会丢失数据,比如从小整型到大整型。显式转换需要使用`()`操作符,可能会丢失数据...
在转换方面,C#区分了隐式转换和显式转换。隐式转换是安全的,不需要在源代码中进行特殊标记,而显式转换则需要进行类型转换操作,这可能涉及数据丢失或需要显式的转换语句。 变量在C#中是存储信息的标识符,它们...
* 接口的隐式和显式实现 * 接口查询(跳转)技术 第十一章 面向对象编程学习 * 继承学习:单继承、多继承和接口继承 * 多态学习:方法重载和方法重写 * 封装、继承、多态的关系和应用 第十二章 委托和事件驱动 *...
综上所述,抽象类、接口、委托和反射是C#中非常重要的概念和技术,掌握它们对于开发复杂的应用程序至关重要。每种技术都有其独特的用途和应用场景,理解它们之间的区别和联系可以帮助开发者更好地组织代码结构和提高...
在C#中,类型转换分为隐式转换和显式转换。隐式转换是安全的,编译器自动进行,例如从较小的整数类型转换到较大的整数类型。显式转换可能需要手动操作,例如将浮点数转换为整数时,可能会丢失精度。 1.2.3 数组类型...
本文将详细介绍 C# 中的接口,包括接口的定义、特性、继承、隐式和显式实现等内容。 接口的定义 在 C# 中,接口是一组相关功能的集合,可以属于任何类或结构。接口使用 interface 关键字进行定义,可以由方法、...
在C#中,类型转换有两种方式:隐式转换和显式转换。隐式转换是编译器自动进行的,如将较小的整型赋值给较大的整型。显式转换需要使用类型转换运算符(如(int)),用于可能丢失信息或可能导致异常的转换。例如,将大...
通常,C#中的接口成员默认是隐式实现的,但通过显式实现,我们可以控制接口成员的可见性,避免与类的其他成员产生命名冲突。这对于多接口实现或者需要特殊访问控制的情况非常有用。 "字符串排序"是C#编程中的常见...
它在设计时考虑了虚拟方法、重载决策规则以及显式接口成员声明等,以避免因引入新版本的依赖库而造成的不必要的中断。 C#语言规范详细说明了它的词法结构和基本概念,其中涉及了类型、变量、转换、表达式、语句、...