Addressables AssetReference is a special reference to any asset in you project. You can control device memory and build dependencies by using AssetReference instead of native asset type (Sprite, GameObject etc.). See more at doc.
There is generic AssetReferenceT<TComponent> designed to make strictly typed asset variables. Your assets workflow become the same as Unity classic workflow this way.
How it works with GameObjects?
We can store only AssetReferenceT<GameObject> not to attached MonoBehaviour component. But classic Unity assets workflow supports reference to MonoBehaviour, so? Use ComponentReference<T>.
ComponentReference is an Addressables extension to store AssetReference via Component attached to GameObject asset. Yes, like a classic Unity prefab. The ComponentReference<T> is a part of Basic Addressables code example doc.
Imagine you have some service creates Overlay from prefab list by generic type parameter. Concrete overlay class inherits BaseOverlay but ComponentReference<ConcreteOverlay> is always not ComponentReference<BaseOverlay> cause generic-types specific.
- Realise IComponentReference interface in BaseClass
- Get derived ConcreteClass type attached to prefab by GetDerivedComponentType() method.