我正在使用C#和.NET一段時間,即使我之前一直在使用OOP語言(更準確地說是Java),而.NET應用程序我看到的界面比我在Java中看到的要多得多。我沒有太多的經驗,所以我並不是說接口在.NET中被更多的使用,但是現在我覺得有必要更深入地理解接口,以及經常使用它們的好處是什麼。接口使用說明(C#透視圖)
我在網上有一些東西,這裏有些東西,對我來說最有意義的解釋是這樣的 - How will I know when to create an interface?。
這裏來了我的問題。我根本不希望對接口有一些神奇的解釋,因爲我讀過的東西已經足以看出沒有這種東西。我希望藉助經驗和編碼,更深層次的理解本身就會出現,所以我決定嘗試使用鏈接中接受答案的接口的好處。我也會在這裏複製粘貼:
你有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()
方法。不過,我得到以下錯誤:
An object reference is required for the non-static field, method, or property
好,有人可以降低水平,我解釋一下我在這個例子中的條款如何我正是受益像這樣使用的接口。
這裏的接口不是問題 - 它是'Program'的'list'字段。這需要一個靜態字段來使用靜態方法'Main'。 (你可能也想把一些東西放在列表中) – kevingessner 2013-02-26 19:28:22
這將是一個很好的閱讀 - http://stackoverflow.com/q/14482483/218882 – 2013-02-26 19:30:21