Объяснение использования интерфейса (с точки зрения C#)C#

Место общения программистов C#
Ответить
Anonymous
 Объяснение использования интерфейса (с точки зрения C#)

Сообщение Anonymous »

Я уже некоторое время работаю с C# и .NET, и хотя раньше я работал с языками ООП (точнее, с Java), работая над приложениями .NET, я вижу, что интерфейсы используются гораздо чаще, чем Я видел на Яве. У меня совсем нет большого опыта, поэтому я не говорю, что интерфейсы чаще используются в .NET, но теперь я почувствовал необходимость более глубокого понимания интерфейсов и того, каковы преимущества, которые заставляют людей использовать их так часто. .

У меня есть кое-что в Интернете, кое-что здесь, и объяснение, которое имело для меня наибольший смысл, было следующее: Как я узнаю, когда создавать интерфейс? ?.

И вот у меня вопрос. Я вообще не ожидаю какого-то волшебного объяснения интерфейсов, потому что я прочитал достаточно, чтобы понять, что такого понятия не существует. Я надеюсь, что с опытом и программированием более глубокое понимание придет само собой, поэтому я решил попробовать пример, указанный как преимущество использования интерфейсов из принятого ответа по ссылке. Я тоже скопирую и вставлю это сюда:

у вас есть a, b, c, d 4 разных типов. во всем вашем коде есть что-то вроде:

Код: Выделить всё

a.Process();
b.Process();
c.Process();
d.Process();
Почему бы им не реализовать IProcessable, а затем реализовать

Код: Выделить всё

List 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 list;
static void Main(string[] args)
{
foreach (ITest p in list)
p.Test();
}
}
}
Ну. Кажется, я действительно все понял неправильно. Я думал, что, реализовав тот же интерфейс, я смогу автоматически получить список всех классов и использовать их, например, как в моем методе Main() выше. Однако я получаю следующую ошибку:


Для нестатического поля, метода или свойства требуется ссылка на объект


em>


Ну, может кто-нибудь понизить мне уровень и объяснить мне на этом примере, какую именно выгоду я получаю, используя интерфейс.

Подробнее здесь: https://stackoverflow.com/questions/150 ... erspective
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»