最后几天我经常遇到“实现界面”一词......我知道它的内容是什么,但我想了解更多信息和一些资源。类何时实现接口?
答案 0 :(得分:4)
接口是一个契约,它指定了类必须创建的必需方法集。
例如:
public interface ITest
{
public void DoSomething(int someInt);
}
public class MyClass : ITest
{
public void DoSomething(int someInt)
{
... Do some stuff
}
}
如果未包含DoSomething
方法,编译器将抛出错误。
答案 1 :(得分:2)
接口是类必须实现的功能规范。实现接口时,您要为类的任何使用者指定您提供给定接口中定义的功能。例如(在C#中):
public interface ISearchable
{
List<object> Search(string query);
}
ISearchable
是一个接口,它指定一个方法,理论上应该为类提供一些搜索功能。现在,任何想要实现搜索功能的类都可以实现ISearchable
接口:
public class ConcreteSearchable : ISearchable
{
public List<object> Search(string query)
{
// Implementation
}
}
您现在有一个实现ISearchable
接口的类。这提供了几个好处。首先,您已明确声明了类的某些行为。其次,您现在可以处理您的类(以及接口的其他实现)多态。
例如,如果有许多类型实现ISearchable
接口,您可以创建一个SearchableFactory
,它将根据某些参数构造一个具体类型。工厂的消费者不会关心混凝土类型......只要他们可以搜索它:
public class SearchableFactory
{
public static ISearchable CreateInstance(string query)
{
if(query.Contains("SELECT"))
return new SqlSearchable();
else
return new ConcreteSearchable();
}
}
答案 2 :(得分:2)
接口是类需要实现的方法列表。这是一种将类如何与类提供的服务分离的方法。
你可以想象一下Stack数据结构。它的界面可能有以下内容:
push(Node);
Node pop();
Node peek();
现在,如果您使用数组来实现堆栈,您将把索引保存到数组中并使用它来执行操作。如果你有一个链表,你只需要指向头部。接口的重点是,只要您的实现提供了所需的方法,您的实现的用户就不需要知道您的实现类如何完成工作。
Java和C#等语言提供了明确的interfaces。其他如ruby或python,允许您使用相同的技术,但不使用关键字强制执行它。您可能会听到Duck Typing这个词。这是一种说法,如果某些东西实现了正确的接口,它可以被使用,无论实现如何。
答案 3 :(得分:2)
实施界面是什么意思?
如果我们从接口是什么开始,然后努力实现一种方法,那么也许是最好的。
示例#1:
世界上每一个麦当劳都有一定的共性。事实上,如果你想经营一家麦当劳特许经营店,你 必须 遵循他们的特许经营规则:
这些是他们的规则。它在合同中。每家餐馆都必须遵守该合同。每家餐厅都略有不同,但就上述规则而言,它们是相同的。
这对客户来说也是一件好事。如果您走进世界上任何一家麦当劳餐厅,您肯定知道可以购买巨无霸。
麦当劳与接口有什么关系?
“界面”只不过是一份契约。任何“实施”或签订合同的餐馆都必须遵守它。换句话说,任何实施麦当劳特许经营界面的餐厅都必须遵循它。
为什么称为IMcDonald的界面而不是麦当劳的界面?
当您命名界面时,通常的做法是以“I”开头。
示例#2
世界上所有的飞机都有一定的共性,无论哪种类型。换句话说,它们都实现了Iplane接口。
IPlane接口规定任何实现它的平面必须具有:
因此,如果波音737遵循这些规则,作为客户,您保证您的购买将有翅膀并将飞行。以下是实施上述界面的波音737的示例:
public interface IPlane
{
void Fly();
void HasTWoWings();
void Engine();
}
class Boeing737 : IPlane // <-------------- the Boeing 737 implements the interface
{
// this means that the Boeing737 MUST have a fly, hastwowings and an engine method.
// the interface doesn't specify HOW the plane must fly. So long as it does fly
// the compiler doesn't care.
public void Fly()
{
Console.WriteLine("Come fly with me, let's fly, let's fly awaaaaaaaay");
}
public void HasTWoWings()
{
Console.WriteLine("I've got two wings");
}
public void Engine()
{
Console.WriteLine("BRrrrrrrrooooooooooooooooooooooooooooooooom!");
}
}
我希望能帮到你们。
那有什么用呢?
如果您是想要预订飞机的乘客,这将变得非常方便。你不确定哪些飞机可供你使用。而且你并不关心它,只要它们是飞机,只要它们飞行,并且有两个机翼和一个发动机。当你在机场时,你可能会得到一架波音,或者你可能会得到空中客车,或者你可能得到一个斯蒂格 - 但你知道无论你得到什么样的飞机,他们都会做一份工作。他们可能以不同的方式飞行,但他们都飞了。
这允许您以这样的方式编写代码,以便最大限度地降低维护成本并使其更容易修改而不会导致错误。
答案 4 :(得分:1)
接口为您的代码增加了透明度。接口定义由类实现的合同。让我们说我告诉你,你可以成为我帮派的一部分,但你需要一直穿绿色衬衫。如果您说YES,那么您正在执行合同,现在您必须始终穿着绿色衬衫。
答案 5 :(得分:0)
接口通常是对函数的描述,它们作为参数需要什么以及它们将返回什么。描述如何使用函数以及从它们返回的内容。
实现接口意味着在函数名称,属性和返回值方面实际编写一些代码来完成接口的描述。