我想知道Interface的重要用途.我读过很多文章,但没有明确界面的概念.
我写了一个小程序.我已经定义了Interface Itest.Class(Manager)
已经实现了Interface.Another class(Employee)
没有实现的接口.但是DoSomething()
在class(Employee
)的接口中定义了相同的method ().我可以从类对象中调用该方法.那我为什么要去实现接口呢?我可以直接在类中实现该方法并调用该方法.为什么我要在接口中执行额外的步骤,然后按类继承接口.我知道接口支持多继承,但我在这个例子中没有使用多重继承.
感谢您的任何想法或意见.
public interface Itest { void DoSomething(); } public class Manager:Itest { public void DoSomething() { Console.WriteLine("test...."); } } class Employee { public void DoSomething() { Console.WriteLine("test...."); } } class Program { static void Main(string[] args) { Manager m = new Manager(); m.DoSomething(); Employee e = new Employee(); e.DoSomething(); Console.ReadLine(); } }
thecoop.. 16
接口允许您使用多重继承进行排序.在您的示例中,它允许您将Employee或Manager的实例放入同一个变量中,然后调用DoSomething
该变量,并将方法调用分派给该变量当前引用的实例.例如:
public interface IEmployee { void DoSomething(); } // assume Manager and Employee both implement IEmployee IEmployee ie = new Manager(); ie.DoSomething(); // calls Manager.DoSomething() ie = new Employee(); ie.DoSomething(); // calls Employee.DoSomething()
如果您没有使用接口,则必须执行以下操作:
object o; // assign Manager or Employee (or something else!) to o if (o is Manager) ((Manager)o).DoSomething(); else if (o is Employee) ((Employee)o).DoSomething();
接口定义了一个契约,只要一个实例实现了该接口,您就不关心它在运行时的实际情况.您可以让同一个类实现多个接口,然后在这些接口的所有变量中使用该类的实例.您不能对抽象类使用相同的内容,因为类一次只能继承一个类.
这里我使用的接口,现在一个例子是定义一个对象模型-我已经得到了各种属性(接口IHasStorage
,IHasPrivileges
,IHasCheezburger
),则表示具体的对象实现并取其然而,许多接口,适用于该类的属性的类
接口允许您使用多重继承进行排序.在您的示例中,它允许您将Employee或Manager的实例放入同一个变量中,然后调用DoSomething
该变量,并将方法调用分派给该变量当前引用的实例.例如:
public interface IEmployee { void DoSomething(); } // assume Manager and Employee both implement IEmployee IEmployee ie = new Manager(); ie.DoSomething(); // calls Manager.DoSomething() ie = new Employee(); ie.DoSomething(); // calls Employee.DoSomething()
如果您没有使用接口,则必须执行以下操作:
object o; // assign Manager or Employee (or something else!) to o if (o is Manager) ((Manager)o).DoSomething(); else if (o is Employee) ((Employee)o).DoSomething();
接口定义了一个契约,只要一个实例实现了该接口,您就不关心它在运行时的实际情况.您可以让同一个类实现多个接口,然后在这些接口的所有变量中使用该类的实例.您不能对抽象类使用相同的内容,因为类一次只能继承一个类.
这里我使用的接口,现在一个例子是定义一个对象模型-我已经得到了各种属性(接口IHasStorage
,IHasPrivileges
,IHasCheezburger
),则表示具体的对象实现并取其然而,许多接口,适用于该类的属性的类
接口用于抽象(抽象类也用于此,但通常包含一些旨在重用的实现).
在C#中,它们允许使用多重继承,这意味着您可以在一个类中实现许多不同的接口.
如果您有许多不同的接口实现,只要使用接口声明,就可以互相替换它们.
例如:
IAnimal
可以通过Cat
和实施Dog
.在其他代码中,您希望调用Talk
在接口中声明的方法.您的代码不必关心它是Cat
对象还是Dog
对象.您可以添加Duck
或Human
不更改该段代码.
这在使用模拟对象测试代码时也很有用,因此可以用一个简单的对象替换真实的对象以进行测试.
一些接口用作标记,因此反射可以轻松地拾取它们(例如,ISerializable
接口,将类标记为可序列化).