using System;
class a
{
//隐式实现接口
interface IA
{
void funcA();
}
interface IB
{
void funcA();
}
class C : IA,IB
{
public void funcA()
{
Console.Write("hello");
}
}
}
在此代码中,我们不知道C为IA的实现,还是IB的实现,因此需要显式实现接口
隐式接口实现,即没有指定实现哪个接口方法。显式的接口实现,指的是在实现过程中,明确指出实现哪一个接口的哪一个方法。
using System;
class a
{
interface IChinese
{
void funcA();
}
interface IEnglish
{
void funcA();
}
class C : IChinese,IEnglish
{
void IChinese.funcA()
{
Console.Write("你好");
}
void IEnglish.funcA()
{
Console.WriteLine("Hello");
}
}
static void Main()
{
IChinese ic = new C();
ic.funcA(); //输出 你好
IEnglish ie = new C(); //先转化为接口,再调用方法
ie.funcA(); //输出 Hello
}
}
使用显式接口实现方法时,需注意:
1、若显式实现接口,方法不能使用任何访问修饰符,显式实现默认的成员为私有
2、显式实现的成员默认为私有的,且方法不能使用任何访问修饰符,所以无法修改访问级别(隐式实现接口可修改访问级别),此时正确的访问方式是把“实现类”显示转化为对应的接口,通过该接口来调用显式实现内的方法
3、当实现单个接口时,通常使用隐式接口,因为对象可以直接访问接口方法
4、实现多个接口时,一般推荐使用显式的接口
下面案例,实现继承自接口,且实现作为实参调用到方法参数列表的形参中去(形参是接口类),完成这个过程实现即自动转化成接口,该方法输出并且调用的是接口的方法,即可只要是实现,无论什么类,都可用在这个方法运行
using System;
class a
{
interface IChinese
{
string funcA();
string funcB();
}
class C : IChinese
{
public string funcA()
{
string a="你好";
return a;
}
public string funcB()
{
string b = "Hello";
return b;
}
}
static void method(IChinese ic)
{
Console.WriteLine("{0},{1}", ic.funcA(), ic.funcB()); //调用的是接口的方法
}
static void Main()
{
C d = new C();
method(d);
}
}
仔细观察下面两个文件的代码,方法写在不同的文件里,myMethod()方法写在不同文件里,具体实现过程也是不一样的。
下面展示的是只继承接口,调用另一个文件的类名+方法,完成实现目的
也可将方法写在实现里,直接调用方法就行了
也可在接口里用类把接口和myMethod方法都括起来,这样在实现里面就需要继承接口的 类名+接口名,调用接口文件的类名+方法名
等等,思考并灵活运用
using System;
namespace ns
{
public interface IChinese
{
string funcA();
string funcB();
}
class method
{
public static void myMethod(IChinese ic)
{
Console.WriteLine("{0},{1}", ic.funcA(), ic.funcB());
}
}
}
using System;
using ns;
public class mc : IChinese
{
public string funcA()
{
string a = "我是funcA";
return a;
}
public string funcB()
{
string b = "我是funcB";
return b;
}
static void Main()
{
method.myMethod(new mc());
}
}
大家还有什么问题,欢迎在下方留言!