一位采访者问我以下问题,我无法回答:
当抽象类存在时,为什么我们需要接口?
无论我们在接口中编写什么方法,我们也可以在Abstract类中编写.那为什么我们需要单独的接口呢?
谁能告诉你原因是什么?
预感谢...
vc *_* 74 15
有几点不同,
接口很适合专注于我们可以在课堂上看到的"视图".该视图可以由实现该接口的多个类共享.
例如,DataTable实现了IListSource和ISerializable.因此,根据上下文,您可以将其视为列表源来读取其数据,或者将其视为可以序列化实例的类.执行此操作时,您将专注于可以具有实例的特定视图.
Jan*_*kan 11
接口表示合同,而您可以在不同(抽象)类中具有该合同的多个实现.
public interface IExample
{
void Do();
}
public abstract class DoFirst : IExample
{
public void Do()
{
Console.WriteLine("Doing it the first way");
}
}
public abstract class DoSecond : IExample
{
public void Do()
{
Console.WriteLine("Doing it the second way");
}
}
public class DoFirstConcrete : DoFirst, IExample
{
public void DoSomethingElse()
{
Do();
Console.WriteLine("Doing something else also with first.");
}
}
public class DoSecondConcrete : DoSecond, IExample
{
public void DoSomethingElse()
{
Do();
Console.WriteLine("Doing something else also with second.");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以实现多个接口,但只能从一个抽象类继承。
一个接口是一个空壳,仅存在的方法的签名(名称/ PARAMS /返回类型)。这些方法不包含任何内容。界面什么也做不了。这只是一种模式
与接口不同,抽象类是类。使用更昂贵,因为从它们继承时需要进行查找。
抽象类看起来很像接口,但它们还有更多的东西:您可以为它们定义行为。更多的是关于一个人说“这些类应该看起来像那样,他们有共同点,所以填空!”。
从这里引用 e-satis(还有更多信息): 接口和抽象类有什么区别?