我使用 C# 和 .NET 已经有一段时间了,尽管我之前一直在使用 OOP 语言(更准确地说是 Java),但在处理 .NET 应用程序时,我发现使用的接口比我使用的要多得多在 Java 中看到。我根本没有太多经验,所以我并不是说接口在 .NET 中使用得更多,但现在我觉得有必要更深入地了解接口以及让人们经常使用它们的好处是什么.
我在互联网上有一些东西,这里有一些东西,对我来说最有意义的解释是——我怎么知道什么时候创建一个界面?.
我的问题来了。我根本不期望对接口进行一些神奇的解释,因为我已经阅读了足够多的内容,发现没有这样的东西。我希望通过经验和编码,更深层次的理解会自行产生,所以我决定尝试这个例子,指出使用链接中接受的答案中的接口的好处。我也会在这里复制粘贴:
您有 4 种不同类型的 a、b、c、d。在你的代码中,你有类似的东西:
a.Process();
b.Process();
c.Process();
d.Process();
为什么不让他们执行IProcessable
,然后执行
List<IProcessable> list;
foreach(IProcessable p in list)
p.Process();
当您添加例如 50 种都做同样事情的类时,这将更好地扩展。
问题是我似乎没有这个。阅读后,我打开我的 Visual Studio 2010 并尝试重新创建这样的示例 - 我创建了一个项目并创建了四个类 - a
, b
, c
, d
. 所有这些类都是相同的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class a : ITest
{
public void Test()
{
System.Console.WriteLine("Hi from a");
}
}
}
只有 4 个不同的名称和Test()
打印名称的方法。这是界面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
interface ITest
{
public void Test();
}
}
根据我的理解,我Program.cs
有这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
List<ITest> list;
static void Main(string[] args)
{
foreach (ITest p in list)
p.Test();
}
}
}
好。看来我真的搞错了。我认为通过实现相同的接口,我可以自动获取所有类的列表并使用它们,例如在我上面的Main()
方法中。但是我收到以下错误:
非静态字段、方法或属性需要对象引用
好吧,有人可以降低我的水平,并根据这个例子向我解释我如何通过使用界面来获得这样的好处。