当前位置:  开发笔记 > 编程语言 > 正文

接口的意义C#

如何解决《接口的意义C#》经验,为你挑选了2个好方法。

我想知道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),则表示具体的对象实现并取其然而,许多接口,适用于该类的属性的类



1> thecoop..:

接口允许您使用多重继承进行排序.在您的示例中,它允许您将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),则表示具体的对象实现并取其然而,许多接口,适用于该类的属性的类


并且,为了放大,你的第二个代码片段*仍然*不能完成这项工作,因为它无法处理调用例程的作者没有预料到的那些可能做的事情.如果我稍后介绍一个Contractor类,那么基于接口的方法只会保留rollin',但是必须更新`if(o is X)`例程来处理新案例.

2> Oded..:

接口用于抽象(抽象类也用于此,但通常包含一些旨在重用的实现).

在C#中,它们允许使用多重继承,这意味着您可以在一个类中实现许多不同的接口.

如果您有许多不同的接口实现,只要使用接口声明,就可以互相替换它们.

例如:

IAnimal可以通过Cat和实施Dog.在其他代码中,您希望调用Talk在接口中声明的方法.您的代码不必关心它是Cat对象还是Dog对象.您可以添加DuckHuman不更改该段代码.

这在使用模拟对象测试代码时也很有用,因此可以用一个简单的对象替换真实的对象以进行测试.

一些接口用作标记,因此反射可以轻松地拾取它们(例如,ISerializable接口,将类标记为可序列化).


接口是OO编程中最抽象的概念。抽象类比接口更具体,通常实现一些接口。重要的是概念,而不是特定语言如何称呼概念。
推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有