using System.Collections.Generic;
public List<Trait> conflicting_traits = new List<Trait>();
public class DerivedTrait : Trait
public class DerivedTrait2 : Trait
public List<Trait> _traits = new List<Trait>();
public bool AddTrait<T>() where T : new()
foreach(var trait in _traits) {
foreach(var conflict in trait.conflicting_traits) {
_traits.Add((Trait)(object)instanced);
public static void Main()
if(test.AddTrait<DerivedTrait>()) {
Console.WriteLine("Yup");
if(!test.AddTrait<DerivedTrait>()) {
Console.WriteLine("Nope");
if(test.AddTrait<DerivedTrait2>()) {
Console.WriteLine("Yup");
foreach(var trait in test._traits) {
Console.WriteLine(trait.GetType().Name);