Difference Between Interface and Class
正如标题所述,我想知道使用这种类的区别
1 2 3 4 5 | public class Account { public string Username { get; set; } public string Password { get; set; } } |
像这样的使用和接口
1 2 3 4 5 6 7 8 9 10 11 | public class Account : IAccount { public string Username { get; set; } public string Password { get; set; } } public interface IAccount { string Username { get; set; } string Password { get; set; } } |
我真的很困惑,因为我发现接口是无用的,因为我用它所能做的一切只能用类来完成,因此,我需要有人为我澄清一些事情。
接口是契约:它指定实现接口的类必须具有哪些成员(方法和属性)。但是因为它只是一个契约,它没有任何成员的实现。类可以实现零个、一个或多个接口。
相反:一门课是…好。。。对象类(如在分类法中)。例如,
因此,如果您想表示您的类遵循一个或多个契约:使用接口。但是,您不能提供实现。如果你想表达你的类是什么,扩展一个基类。在这种情况下,您可以提供一个实现,但只能扩展一个基类。
例如:
链表、数组列表、堆栈和字典有一些共同点:它们表示元素的集合。但它们的实现完全不同。他们唯一的共同点是他们遵守的合同:
另一方面,汽车、摩托车和卡车也有一些共同点:它们是轮式车辆。但他们有更多的共同点:他们都有一台发动机,他们都转动轮胎前进。本质上,它们是
基本上:
An interface provides a
contract specifying how to talk to an object, but not the specifics of how that object handles that request (apart from parameters and return types etc)
还有:
A class (especially an abstract class) provides both the information on how to talk to an object, but in some cases the actual implementation (think overriding a method of a base class).
接口允许您定义对象之间通信的通用形式,而不需要关心对象如何处理这些事情的细节。
例如日志记录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public interface ILog { void WriteMessage(string message); } public class ConsoleLogger : ILog { public void WriteMessage(string message) { Console.WriteLine(message); } } public class MessageBoxLogger : ILog { public void WriteMessage(string message) { MessageBox.Show(message); } } public void DoSomethingInteresting(ILog logger) { logger.WriteMessage("I'm doing something interesting!"); } |
由于
所以在上面的代码中,可以向