官方定义: 接口仅包含方法,属性,事件,索引器的签名。
- 在一个类或者结构体在实现一个接口时必须实现这个接口定义声明的所有成员
- 一个接口可以继承一个或者多个基接口(Base Interface)
- 在一个包含基类以及接口的列表中,基类必须放在前面
- 当一个类实现接口时可以显式的实现接口的成员,一个显式实现的接口成员是不能通过类的实例访问的,只能通过接口的实例访问
namespace CSharpStudy
{
interface IAddInterface
{
string IAdd(string a, string b);
int IAdd(int a, int b);
}
class Add
{
public string Addstr(string a, string b)
{
return a + b;
}
}
//class Program : IAddInterface, Add 编译错误 在一个包含基类以及接口的列表中,基类必须放在前面
class Program:Add,IAddInterface
{
static void Main(string[] args)
{
Program P = new Program();
IAddInterface IP = new Program();
Console.WriteLine(P.IAdd("Hello", " World")) ;
Console.WriteLine(IP.IAdd(1, 2));
Console.WriteLine(IP.IAdd("Hello", " World"));// 接口的实例可以访问显式和隐式实现的接口成员
//P.IAdd(1, 2); 编译错误, 一个显式实现的接口成员是不能通过类的实例访问的,只能通过接口的实例访问。
}
public string IAdd(string a, string b) //如果要隐式的实现接口,那么必须要是 public的。
{
return a + b;
}
int IAddInterface.IAdd(int a, int b)
{
return a + b;
}
}
简单的接口访问器实现:
namespace IndexerTest
{
public interface IIndexers
{
string this[int index]
{
get;
}
}
class Program: IIndexers
{
string[] Strs = {"Sun","Mon","Tus","Wes","Thu","Fri","Sat"};
string IIndexers.this[ int index]
{
get
{
return Strs[index - 1];
}
}
static void Main(string[] args)
{
IIndexers P = new Program();
Console.WriteLine(P[1]);
}
}
}