OriginalGriff
По сути, интерфейсы - это способ обеспечить своего рода множественное наследование в C#.
Поскольку вы можете получить класс только из одного базового класса (или все начинает очень запутываться), без него трудно предоставить дополнительные функции. Базовый класс описывает, что такое класс-интерфейсы описывают, что может делать класс.
Они предоставляют контракт: "если вы реализуете необходимые биты, вы можете рассматриваться как один из нас". Например, если ваш класс Students является производным от People и реализует IEnumerable, то он имеет все функции People, но его также можно использовать в цикле foreach.
Там, где классы реализуют один и тот же интерфейс, все они могут использоваться одним и тем же способом и через один и тот же набор методов, несмотря на то, что в противном случае они не связаны между собой классами.
Также смотрите здесь: http://msdn.microsoft.com/en-us/library/87d83y5b(v=против 80). aspx[^]
а здесь: http://en.wikibooks.org/wiki/C_Sharp_Programming/Interfaces[^]
"Итак,если необходимо определить каждую вещь в классе, реализующем интерфейс, то зачем нам нужен интерфейс, мы можем объявить и определить все вещи только в этом классе. Это главное сомнение, которое у меня есть, поскольку мы должны определить каждый метод и переменные в реализующем классе, то мы можем объявить эти переменные в этом классе только тогда, когда нет необходимости в интерфейсном ритуале?"
Нет.: смейтесь:
Давайте на минуту забудем о компьютерах.
Когда я поступил в университет (давным-давно), это было так называемое «закрытое дело» - это было законное требование вступить в Студенческий союз (единственный профсоюз, в который я когда-либо вступал) и до тех пор, пока вы не вступите ( и платили ежегодный взнос, давайте не будем забывать о членских взносах) вы не могли посещать лекции, вы не могли вступить в Union Bar (где продавали дешевое пиво, поскольку это был членский клуб), вы не могли вступить ни в один Социальные клубы университета. Потому что все они требовали, чтобы вы подписали свою членскую карту Студенческого союза, чтобы доказать, что у вас есть право быть членом: вы учились в правильном университете. Скорее всего, в вашей стране есть что-то подобное.
Если вы думаете о UnionMembership как о интерфейсе, он ничего не передает. Никаких льгот. Мой студенческий класс должен был реализовать UnionMembership, чтобы получить его свойство: UnionMembership.MemberCard-и выполнить его метод: PayFeeEveryYear(двойные лоты).
Но мой ученик должен был быть человеком (который включает в себя гораздо больше свойств и методов), на многие из которых класс ученика не должен влиять: имя, адрес, номер социального страхования, родители ...
Но вы не можете наследовать от двух несвязанных классов! Понятно, что было решено, что это слишком сложно и дает слишком много проблем на практике.
Интерфейс дает нам не способ вывести из двух классов, а вместо этого способ вывести из базового класса (человека) и включить членство в другой класс, а также получить все преимущества, которые дает такое членство:
public class Student : Person, IUnionMembership
{
...
}
Есть ли в этом смысл?
OriginalGriff
Да, но для новичка у них, вероятно, есть о чем подумать для начала! :смеяться:
prasad13.sawant
У меня есть еще один вопрос. Если мы используем IEnumerable для целей интерфейса, то почему нет необходимости определять его методы в реализующем классе, то есть там, где мы реализуем интерфейс, так как необходимо определять члены и методы класса IEnumerable.
OriginalGriff
Это.
Класс, реализующий IEnumerable, должен включать класс GetEnumerator:
public IEnumerator GetEnumerator()
{
...
}
Если нет, то компилятор будет жаловаться:
"Имя вашего класса" не реализует систему "член интерфейса".Коллекции.интерфейс IEnumerable.Метод getenumerator()'
Если вы объявите интерфейс, реализующий IEnumerable, то все производные классы должны реализовать метод GetEnumerator - вы не можете объявить его в определении интерфейса, так как он вообще не может содержать никакого кода.
prasad13.sawant
Итак,если необходимо определить каждую вещь в классе, реализующем интерфейс, то зачем нам нужен интерфейс, мы можем объявить и определить все вещи только в этом классе. Это главное сомнение, которое у меня есть, поскольку мы должны определить каждый метод и переменные в реализующем классе, то мы можем объявить эти переменные в этом классе только тогда, когда нет необходимости в интерфейсном ритуале?