Skip to content

Commit 105f461

Browse files
committed
Update generics example
1 parent 7ae59bf commit 105f461

File tree

3 files changed

+93
-23
lines changed

3 files changed

+93
-23
lines changed

Assets/Example/Example_Contravariance.cs

Lines changed: 0 additions & 23 deletions
This file was deleted.

Assets/Example/Example_Generics.cs

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using UnityEngine;
4+
5+
public interface IActor { }
6+
public interface IStandardActor : IActor { }
7+
public interface INetworkActor : IActor { }
8+
9+
public interface IContravarianceAction<in T> where T : IActor {
10+
void DoAction (T actor);
11+
}
12+
13+
public interface ICovarianceAction<out T> where T : IActor
14+
{
15+
T Actor { get; }
16+
}
17+
18+
public interface IActorAction : IContravarianceAction<IActor>, ICovarianceAction<IActor> { }
19+
public interface IStandardActorAction : IContravarianceAction<IStandardActor>, ICovarianceAction<IStandardActor> { }
20+
public interface INetworkActorAction : IContravarianceAction<INetworkActor>, ICovarianceAction<INetworkActor> { }
21+
22+
[Serializable]
23+
public sealed class StandardActorAction : IContravarianceAction<IStandardActor>, ICovarianceAction<IStandardActor>
24+
{
25+
public void DoAction (IStandardActor actor)
26+
{
27+
}
28+
public IStandardActor Actor => null;
29+
}
30+
31+
[Serializable]
32+
public sealed class ActorAction : IContravarianceAction<IActor>, ICovarianceAction<IActor>
33+
{
34+
public void DoAction (IActor actor)
35+
{
36+
}
37+
public IActor Actor => null;
38+
}
39+
40+
[Serializable]
41+
public abstract class BaseAction<T> : IContravarianceAction<T>, ICovarianceAction<T> where T : IActor
42+
{
43+
public void DoAction (T actor) {
44+
}
45+
public T Actor => default;
46+
}
47+
48+
[Serializable]
49+
public sealed class DerivedAction1 : BaseAction<IActor> { }
50+
51+
[Serializable]
52+
public sealed class DerivedAction2 : BaseAction<INetworkActor> { }
53+
54+
[Serializable]
55+
public sealed class DerivedAction3 : BaseAction<IStandardActor> { }
56+
57+
[Serializable]
58+
public sealed class NetworkActorAction1 : INetworkActorAction
59+
{
60+
public void DoAction (INetworkActor actor)
61+
{
62+
}
63+
public INetworkActor Actor => null;
64+
}
65+
66+
[Serializable]
67+
public sealed class NetworkActorAction2 : IContravarianceAction<INetworkActor>, ICovarianceAction<INetworkActor>
68+
{
69+
public void DoAction (INetworkActor actor)
70+
{
71+
}
72+
public INetworkActor Actor => null;
73+
}
74+
75+
[Serializable]
76+
public sealed class NetworkActorAction3 : IContravarianceAction<IActor>, ICovarianceAction<IActor>
77+
{
78+
public void DoAction (IActor actor)
79+
{
80+
}
81+
public IActor Actor => null;
82+
}
83+
84+
public class Example_Generics : MonoBehaviour
85+
{
86+
87+
[SerializeReference, SubclassSelector]
88+
public List<IContravarianceAction<INetworkActor>> contravarianceActions = new List<IContravarianceAction<INetworkActor>>();
89+
90+
[SerializeReference, SubclassSelector]
91+
public List<ICovarianceAction<INetworkActor>> covarianceActions = new List<ICovarianceAction<INetworkActor>>();
92+
93+
}

0 commit comments

Comments
 (0)