using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace IsAsTest
{
interface ITest
{
void Fun1(string text);
}
/// <summary>
/// 隐式实现支持实例调用和接口调用
/// </summary>
class Class1 : ITest
{
public void Fun1(string text)
{
Console.WriteLine("Class1 do fun1--" + text);
}
}
/// <summary>
/// 显示实现的实现格式:返回类型 接口名.接口方法名称(){方法体}
/// 仅支持接口调用
/// </summary>
class Class2 : ITest
{
void ITest.Fun1(string text)
{
Console.WriteLine("Class2 do fun1--" + text);
}
}
class Program
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
c1.Fun1("Class1实例调用");
ITest t1 = c1 as ITest;
if (t1 != null)
t1.Fun1("接口调用");
Class2 c2 = new Class2();
//c2.Fun1("Class2实例调用");
ITest t2 = c2 as ITest;
if (t2 != null)
t2.Fun1("接口调用");
Console.ReadKey();
}
}
}
- 当类实现一个接口时,通常使用隐式接口实现,这样可以方便的访问接口方法和类自身具有的方法和属性。
- 当类实现多个接口时,并且接口中包含相同的方法签名,此时使用显式接口实现。即使没有相同的方法签名,仍推荐使用显式接口,因为可以标识出哪个方法属于哪个接口。
- 隐式接口实现,类和接口都可访问接口中方法。显式接口实现,只能通过接口访问。
https://www.cnblogs.com/ben-zhang/archive/2012/12/18/2823455.html
二、接口被父类实现后,子类就自动实现了该接口
class Class3 : Class1, ITest
{
public void Fun2()
{
Console.WriteLine("Class3 do fun2");
}
}
测试代码:
class Program
{
static void Main(string[] args)
{
Class3 c1 = new Class3();
c1.Fun1("Class3实例调用");
ITest t1 = c1 as ITest;
if (t1 != null)
t1.Fun1("接口调用");
Console.ReadKey();
}
}
执行结果: