大家好,我在C#的界面上做了很多研究,我读了很多书,看过视频,但是灯泡还没有为我打开电话: - (
Q1假设我们有一个方法,它的名称是实现发生的类中的Show(),并且在该方法中我们有一个数组,它使用Show()方法实现接口ISample。
现在如果实现中的该方法的内部从数组更改为List
因为我们正在使用界面,这意味着它不会破坏如果它在数千个地方被调用,因为它仍在调用方法名称并且不会。在方法名称与保持合同承诺的接口方法名称之间保留合同时,请注意内部人员的行为?
希望我已经澄清了更好,所以有人可以为我解决这个问题。在此先感谢回复:)
答案 0 :(得分:0)
你用你自己的一个例子击中了头上的钉子
如果实现中的该方法的内部从数组更改为List
假设您正在编写报告类,并且您希望计算各种来源的项目数,这些来源返回类型List,List,Collection,Stack和Queue。您可以为每个返回的类型编写一个方法,并继续为您遇到的每种新类型编写新计数器。或者你可以编写一个接受任何IEnumerable的计数器方法。
答案 1 :(得分:0)
接口可以提高可维护性(如果正确完成)。接口也可用于产生多重继承的效果,但它们是不同的概念。
理解接口的关键是理解耦合的概念。耦合本质上意味着你的代码是如何交织在一起的。耦合越多,进行更改时破坏的内容就越多。当你想到紧耦合时,想想一个紧密缠绕的缠绕球。我们想要的是一个松散的缠绕球,缠绕的可能性最小。纠缠是不好的,因为每次我们改变某些东西时,对这种改变的每次纠缠都会导致我们的代码破坏。接口是实现松耦合的一种方法。
这是一个很好的线程,可以进一步解释耦合:What is "loose coupling?" Please provide examples
答案 2 :(得分:0)
接口与内部或实现无关。它们与被称为某种方式的能力有关。
接口是类承诺支持具有特定签名的调用。例如,如果您有可以显示的控件列表,则可能有一个类似
的界面interface IShowable
{
void Show();
}
如果列表中有十几种不同类型(和类)的控件,您仍然可以使用类型无关的代码显示它们,只要它们支持该接口即可。例如:
var list = new List<IShowable>();
list.Add(new MyShowableTextBoxControl());
list.Add(new MyShowableClockControl());
list.Add(new MyShowableSmileyControl());
foreach (var item in list) list.Show(); //Magic!!
当您想要编写调用库的代码但是您不确定哪个库时,可以使用此功能。例如,想象一下,您还没有决定是使用Oracle还是SQL Server。如果你有两个班级
class OracleLibrary : IGenericDatabaseLibrary
和
class SqlServerLibrary : IGenericDatabaseLibrary
...然后在代码的主要部分,您可以安全地调用通用数据库库中的任何内容,而无需担心您是在调用Oracle还是SQL Server。
IGenericDatabaseLibrary db = Factory.GetDatabaseLibrary(); //We don't know what this is going to return
db.ExecuteQuery(sql); //As long as ExecuteQuery is in the interface, we know we can call it