私はしばらくの間 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 を開いて、この例を再作成しようとしました。プロジェクトを作成し、4 つのクラスを作成し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()
上記の方法のように使用できると思いました。ただし、次のエラーが表示されます。
非静的フィールド、メソッド、またはプロパティにはオブジェクト参照が必要です
さて、誰かが私にレベルを下げて、この例に関して、インターフェイスを使用することでこのように正確にどのように利益を得るかを説明してもらえますか.