Interfejs jest klasą w pełni abstrakcyjną (nie można z niego stworzyć obiektu), dlatego też nie może posiadać konstruktora.
Wewnątrz interfejsu mogą znaleźć się tylko właściwości i puste metody.
Przed nazwą interfejsu dodaje się wielką literę I.
Elementy interfejsu są domyślnie abstrakcyjne i publiczne.
Interfejsy implementuje się za pomocą znaku :
Można implementować wiele interfejsów, które oddziela się przecinkami.
W przypadku interfejsów (w odróżnieniu od zwykłej klasy abstract) nie trzeba używać słowa kluczowego override.
Klasy implementujące interfejs muszą zawierać jego wszystkie metody i właściwości.
Poniżej przykład stworzenia i implementacji interfejsu odpowiedzialnego za zbieranie itemków w grze. Każdy taki item powinien zawierać typ, ilość oraz posiadać metodą, dzięki której go pobierzemy. Chcąc wymusić takie zachowanie na każdym obiekcie, tworzy się i implementuje interfejs.
public enum CollectableType {
hp,
ammo
}
public interface ICollectable
{
public CollectableType CollectItemType { get; set; }
public int Quantity { get; set; }
public (CollectableType, int) Collect();
}
using UnityEngine;
public class CollectItem : MonoBehaviour, ICollectable
{
[field: SerializeField]
public CollectableType CollectItemType { get; set; }
[field: SerializeField]
public int Quantity { get; set; }
public (CollectableType, int) Collect()
{
return (CollectItemType, Quantity);
}
}
using UnityEngine;
public class PlayerStats : MonoBehaviour
{
public int hp { get; set; }
public int ammo { get; set; }
private void OnTriggerEnter2D(Collider2D collision)
{
if(collision.GetComponent<ICollectable>() != null)
{
(CollectableType, int) item = collision.GetComponent<ICollectable>().Collect();
switch (item.Item1)
{
case CollectableType.ammo:
ammo += item.Item2;
break;
case CollectableType.hp:
hp += item.Item2;
break;
default:
break;
}
}
}
}