接口只聲明、無實現、不能實例化;
接口可包含方法、屬性、事件、索引器, 但無字段;
接口成員都是隱式的 public, 不要使用訪問修飾符;
類、結構和接口都可以繼承多個接口;
繼承接口的類必須實現接口成員, 除非是抽象類;
類實現的接口成員須是公共的、非靜態的.
入門示例:
using System;
interface MyInterface
{
int Sqr(int x);
}
class MyClass : MyInterface
{
public int Sqr(int x) { return x * x; }
}
class Program
{
static void Main()
{
MyClass obj = new MyClass();
Console.WriteLine(obj.Sqr(3)); // 9
MyInterface intf = new MyClass();
Console.WriteLine(intf.Sqr(3));
Console.ReadKey();
}
}
一個接口得到不同的實現:
using System;
interface MyInterface
{
int Method(int x, int y);
}
class MyClass1 : MyInterface
{
public int Method(int x, int y) { return x + y; }
}
class MyClass2 : MyInterface
{
public int Method(int x, int y) { return x - y; }
}
class Program
{
static void Main()
{
MyInterface intf1 = new MyClass1();
MyInterface intf2 = new MyClass2();
Console.WriteLine(intf1.Method(3, 2)); // 5
Console.WriteLine(intf2.Method(3, 2)); // 1
Console.ReadKey();
}
}
顯示實現接口(接口名.方法):
using System;
interface MyInterface1
{
void Method();
}
interface MyInterface2
{
void Method();
}
class MyClass : MyInterface1, MyInterface2
{
/* 顯示實現接口不需要訪問修飾符; 但顯示實現的方法只能通過接口訪問 */
void MyInterface1.Method() { Console.WriteLine("MyInterface1_Method"); }
void MyInterface2.Method() { Console.WriteLine("MyInterface2_Method"); }
}
class Program
{
static void Main()
{
MyInterface1 intf1 = new MyClass();
MyInterface2 intf2 = new MyClass();
intf1.Method(); // MyInterface1_Method
intf2.Method(); // MyInterface2_Method
Console.ReadKey();
}
}