在C#中,允许您创建接口类型的引用变量,换句话说,您可以创建接口引用变量。这种变量可以引用实现其接口的任何对象。接口参考变量仅知道由其接口声明所声明的方法。它不允许访问对象可能支持的任何其他变量或方法。当您使用父类引用访问子类对象时,此概念类似。
以下示例说明了接口引用的概念:
范例1:
// C# program to illustrate the
// concept of Interface References
using System;
// interface declaration
public interface Race {
// declaration of abstract methods of
// interface that will be implemented
// by the class which inherits the interface
void Speed(int s);
void Distance(int d);
}
// class implementing interface
public class Person1 : Race {
int sp1, di1;
// abstract method of
// Race interface
public void Speed(int p1s) {
sp1 = p1s;
Console.WriteLine("Speed Method implemented by Person1");
}
// abstract method of
// Race interface
public void Distance(int p1d) {
di1 = p1d;
Console.WriteLine("Distance Method implemented by Person1");
}
// method of class Person1
public void display1() {
Console.WriteLine("The Speed of 1st person is: "+sp1);
Console.WriteLine("The distance covered by 1st person is: "+di1);
}
}
// class implementing interface
public class Person2 : Race {
int sp2, di2;
// abstract method of
// Race interface
public void Speed(int p2s) {
sp2 = p2s;
Console.WriteLine("Speed Method implemented by Person2");
}
// abstract method of
// Race interface
public void Distance(int p2d) {
di2 = p2d;
Console.WriteLine("Distance Method implemented by Person2");
}
// method of class Person2
public void display2() {
Console.WriteLine("The Speed of 2nd person is: "+sp2);
Console.WriteLine("The distance covered by 2nd person is: "+di2);
}
}
// Driver Class
public class GFG {
// Main method
public static void Main(String []args) {
// creating an instance of Person1 class
Person1 obj1 = new Person1();
// creating an instance of Person2 class
Person2 obj2 = new Person2();
// creating an Reference
// of interface Race
Race r;
// ----- For Person1 Class ----------
// assigning Person1 object 'obj1'
// to interface Reference 'r'
r = obj1;
// Now you can access the abstract method
// of Race interface which are implemented
// by class Person1
r.Speed(10);
r.Distance(50);
// if you will try to call display1()
// method using 'r' it will give error
//r.display1();
// calling the display1()
// method of Person1 Class
obj1.display1();
// ----- For Person2 Class ----------
// assigning Person2 object 'obj2'
// to interface Reference 'r'
r = obj2;
// Now you can access the abstract method
// of Race interface which are implemented
// by class Person2
r.Speed(15);
r.Distance(45);
// if you will try to call display2()
// method using 'r' it will give error
//r.display2();
// calling the display1()
// method of Person1 Class
obj2.display2();
}
}
输出:
Speed Method implemented by Person1
Distance Method implemented by Person1
The Speed of 1st person is: 10
The distance covered by 1st person is: 50
Speed Method implemented by Person2
Distance Method implemented by Person2
The Speed of 2nd person is: 15
The distance covered by 2nd person is: 45
说明:在上面的示例中,我们有一个名为Race的接口,两个类Person1和Person2正在实现该接口的方法。 Person1类具有自己的名为display1()的方法,类似的Person2类具有其自己的方法display2() ,无法使用接口引用来调用它。为了使用接口引用(这里r是接口引用)来调用方法,您必须为其分配一个class对象。就像您将Person1的对象obj1分配给r一样,即r = obj1;然后调用Person1类实现的Speed()和Distance()方法。为了调用display1()方法,必须使用obj1。类似地使用r = obj2;我们正在调用Person2类的方法。
范例2:
// C# program to illustrate the
// concept of Interface References
using System;
// interface declaration
interface Vehicle {
// all are the abstract methods.
void changeGear(int a);
void speedUp(int a);
void applyBrakes(int a);
void printStates();
}
// class implements interface
class Bicycle : Vehicle {
int speed;
int gear;
// to change gear
public void changeGear(int newGear)
{
gear = newGear;
}
// to increase speed
public void speedUp(int increment)
{
speed = speed + increment;
}
// to decrease speed
public void applyBrakes(int decrement)
{
speed = speed - decrement;
}
public void printStates()
{
Console.WriteLine("speed: " + speed + " gear: " + gear);
}
}
// Driver Class
class GFG {
// Main Method
public static void Main(String[] args)
{
// creating an instance of Bicycle
Bicycle bicycle = new Bicycle();
// Creating interface references
Vehicle obj;
// assigning Bicycle object 'bicycle'
// to interface Reference 'obj'
obj = bicycle;
// calling the abstract methods
// implemented by class Bicycle
obj.changeGear(4);
obj.speedUp(5);
obj.applyBrakes(2);
Console.WriteLine("Bicycle Present State:");
// calling the method of class Bicycle
obj.printStates();
}
}
输出:
Bicycle Present State:
speed: 3 gear: 4
说明:在上面的示例中,Vehicle是一个接口,Bicycle类实现了此接口。此处obj在Main()方法中声明为对Vehicle接口的引用。现在,此obj用于引用Bicycle类的对象Bicycle。