0

Всем привет, заранее спасибо каждому <3. Так вот, в интерфейсах часто (Если не всегда) к переменным прибавляют {get; set;} как я понял это значит что можно ЧИТАТЬ и ПЕРЕПИСЫВАТЬ значения, но вот я не понимаю зачем это делать если вроде как интерфейс это абстракция. Кто-то делал через интерфейс и Scriptable Objects инвентарь и сделали примерно так

Первый скрипт с интерфейсом

IItems
{ 
    string name {get;} 
    `И другие переменные`
}

Потом он в другой скрипт который прикреплён к Scriptable Objects присвоил значения к интерфейсу вот так

Scriptable Objects, IItems
{
    public string mame => _name; //реализация
    [SerializedField]private string _name; //для редактирования значения параметра в СкрОбъект
}

Так вот, нафига это всё сделано, для чего здесь используется интерфейс, почему нельзя без него просто только с [Serialized Field] и потом просто обратится к этому СкриптОбъекту и уже с ним взаимодействовать. Та и ещё одно, куда девается(Как можно присвоить что-то абстракции) то что выделил

Scriptable Objects, IItems{public string name => _name; [Serialized Field]private string _name;}

Как можно к этом обратится

  • 1
    Этот код невалидный, вы плохо его скопировали – aepot Nov 14 '22 at 17:48
  • 1
    Про интерфейсы вначале почитайте https://habr.com/ru/post/343852/ – Виктор Nov 14 '22 at 18:08
  • aepot это не код (Это пример) для того что бы понять логику происходящего в целом – Sashok Lopushok Nov 14 '22 at 18:37
  • 1
    Похоже, вам нужно объяснение, в чём разница между полями и свойствами. Это не имеет прямого отношения к интерфейсам. – Alexander Petrov Nov 14 '22 at 18:53
  • 1
    get и set это свойства, у них да, можно указать что они будут только отдавать данные, или наоборот, только их получать. Интерфейс - это контракт, который обязательно должен соблюсти тот, кто его реализует. Если в интерфейсе указано свойство с get и set, то это означает то, что тот, кто будет это реализовывать, обязан будет иметь у себя такое свойство, с таким названием, и с get; set;. Если в интерфейсе указан, например только get, то в реализующем классе также должен быть обязательно только get, а set уже на его усмотрение. – EvgeniyZ Nov 14 '22 at 19:27
  • 1
    Зачем интерфейсы? Скажем так, интерфейс, это когда вам без разницы кто и что там реализовал, и как, важно только то, чтоб на выходе был конечный результат. Допустим вот инвентарь, в нем хранятся предметы, предметы могут быть разные, с разной логикой, допустим квестовый, расходник, броня, оружие. Каждый предмет имеет свою реализацию, свой код, на который инвентарю, по сути, без разницы, ибо ему нужно лишь название, тип, кол-во. Вот вы и делаете интерфейс, который будет содержать в себе нечто связывающее все предметы, делаете коллекцию интерфейса, реализуете интерфейс у нужных классов, готово. – EvgeniyZ Nov 14 '22 at 19:31
  • 1
    у вас тут 2 вопроса: 1) зачем нужны get/set (то есть свойства) 2) зачем нужны интерфейсы. На первый вопрос ответ здесь, на второй вопрос можно почитать тут – tym32167 Nov 14 '22 at 19:46
  • 1
    ВСЕМ ОГРОМНОЕ СПАСИБО, Я МНОГО ЧЕГО ПОНЯЛ СЕЙЧАС <3 – Sashok Lopushok Nov 14 '22 at 20:42

0 Answers0